Flask圖片上傳的三種策略

前端--->服務(wù)器

用戶在前端直接點(diǎn)擊上傳圖片髓梅,圖片則直接保存在服務(wù)器本地褒脯,這樣編程雖然簡(jiǎn)單,但是當(dāng)圖片逐漸多起來的時(shí)候坟募,就會(huì)很占服務(wù)器的磁盤資源岛蚤,并且如果想對(duì)圖片做一些處理,比如控制圖片大小懈糯,是否加上水印等等就很麻煩涤妒。所以不推薦使用該保存方式。示例代碼:

前端主要代碼:

<form action="{{ url_for('upload_row') }}" method="post" enctype="multipart/form-data">
            <label for="fid"><input type="file" id="fid" name="f1"></label>
            <input type="submit" value="上傳">
        </form>

后端代碼:

# 保存到服務(wù)器本地
@cms_bp.route("/upload_row/", endpoint="upload_row", methods=["GET", "POST"])
def upload_row():
    # 文件對(duì)象保存在request.files上赚哗,并且通過前端的input標(biāo)簽的name屬性來獲取
    fp = request.files.get("f1")
    # 保存文件到服務(wù)器本地
    fp.save("a.jpg")
    return redirect(url_for("cms.index"))

前端--->服務(wù)器--->七牛云

用戶先將圖片上傳到服務(wù)器她紫,服務(wù)器做一些過濾等其他圖片處理操作后硅堆,再將圖片上傳到七牛云上,服務(wù)器只需要保存七牛云返回的圖片外鏈贿讹,這樣就可以大大的節(jié)省服務(wù)器空間渐逃,但是這個(gè)過程服務(wù)器既需要接收用戶的請(qǐng)求,又需要請(qǐng)求七牛云围详,這樣就很占服務(wù)器帶寬朴乖,降低性能。

前端代碼:

<form action="{{ url_for('upload_qn') }}" method="post" enctype="multipart/form-data">
            <label for="fid2"><input type="file" id="fid2" name="f2"></label>
            <input type="submit" value="上傳">
        </form>

后端代碼:

from qiniu import Auth, put_data
# 用戶上傳到服務(wù)器助赞,服務(wù)器再上傳到七牛云
@cms_bp.route("/upload_qn/", endpoint="upload_qn", methods=["GET", "POST"])
def upload_qiniu():
    fp = request.files.get("f2")
    file_name = fp.filename
    # 需要填寫你的 Access Key 和 Secret Key
    ak = "******"
    sk = "******"
    # 構(gòu)建鑒權(quán)對(duì)象
    q = Auth(ak, sk)
    # 要上傳的空間
    bucket_name = 'shop'
    # 上傳到七牛后保存的文件名
    key = file_name
    # 生成上傳 Token买羞,可以指定過期時(shí)間等
    token = q.upload_token(bucket_name, key, 3600)
    ret, info = put_data(token, key, data=fp.read())
    # 如果上傳成功
    if info.status_code == 200:
        # 數(shù)據(jù)庫(kù)保存該地址
        img_url = "七牛云域名" + ret.get("key")
    return "success"

前端--->七牛云

為了省去中間途徑服務(wù)器的消耗,前端可以直接上傳圖片到七牛云雹食,七牛云返回該圖片的外鏈畜普,我們則將外鏈保存到一個(gè)隱藏的input標(biāo)簽上,最后前端提交form表單時(shí)將外鏈提交到服務(wù)器保存群叶,因?yàn)樵撨^程會(huì)使用到很多七牛云為我們寫好的JS吃挑,具體開發(fā)教程請(qǐng)參考七牛云JS SDK文檔。這只貼出主要代碼街立。

前端代碼:

<button id="upload-btn">上傳文件</button>
<input type="text" id="image-input">
<img src="" alt="" id="img" width="50px">

前端的所有效果通過JS實(shí)現(xiàn)舶衬,具體JS參考開發(fā)文檔。

后端代碼:

后端只需要編程生成上傳圖片的token即可

from qiniu import Auth
# 前端直接上傳到七牛云
@cms_bp.route("/generate_token/", endpoint="ge_token")
def generate_token():
    # 需要填寫你的 Access Key 和 Secret Key
    access_key = current_app.config.get("ACCESSKEY")
    secret_key = current_app.config.get("SECRETKEY")
    # 構(gòu)建鑒權(quán)對(duì)象
    q = Auth(access_key, secret_key)
    # 要上傳的空間
    bucket_name = 'shop'
    # 生成上傳 Token赎离,可以指定過期時(shí)間等
    # 3600為token過期時(shí)間逛犹,秒為單位。3600等于一小時(shí)
    token = q.upload_token(bucket_name, expires=3600)
    return jsonify({"uptoken": token})

總結(jié):最后一種圖片上傳方式梁剔,可以將流量的消耗直接轉(zhuǎn)加給用戶虽画,減輕服務(wù)器壓力,所以推薦第三種方式荣病,并且七牛云上提供了很多定制化的接口码撰,可以對(duì)圖片、視頻等等作出定制化處理个盆,第三種方式的js很長(zhǎng)脖岛,大家可以去開發(fā)文檔查看,修改成自己需要的颊亮,如果不成功鸡岗,可以給我留言,我發(fā)給你Demo编兄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市声登,隨后出現(xiàn)的幾起案子狠鸳,更是在濱河造成了極大的恐慌揣苏,老刑警劉巖蚌斩,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坷虑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡璧微,警方通過查閱死者的電腦和手機(jī)铅祸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門坑质,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人临梗,你說我怎么就攤上這事涡扼。” “怎么了盟庞?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵吃沪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我什猖,道長(zhǎng)票彪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任不狮,我火速辦了婚禮降铸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摇零。我一直安慰自己推掸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布遂黍。 她就那樣靜靜地躺著终佛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雾家。 梳的紋絲不亂的頭發(fā)上铃彰,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音芯咧,去河邊找鬼牙捉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛敬飒,可吹牛的內(nèi)容都是我干的邪铲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼无拗,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼带到!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起英染,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤揽惹,失蹤者是張志新(化名)和其女友劉穎被饿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搪搏,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狭握,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疯溺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片论颅。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖囱嫩,靈堂內(nèi)的尸體忽然破棺而出恃疯,到底是詐尸還是另有隱情,我是刑警寧澤挠说,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布澡谭,位于F島的核電站,受9級(jí)特大地震影響损俭,放射性物質(zhì)發(fā)生泄漏蛙奖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一杆兵、第九天 我趴在偏房一處隱蔽的房頂上張望雁仲。 院中可真熱鬧,春花似錦琐脏、人聲如沸攒砖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吹艇。三九已至,卻和暖如春昂拂,著一層夾襖步出監(jiān)牢的瞬間受神,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工格侯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鼻听,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓联四,卻偏偏與公主長(zhǎng)得像撑碴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子朝墩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容