第五次課圖片上傳、flask-uploads與雲存儲SDK

一:Fiddler抓包工具的使用

抓圖片上傳請求:

分別爲post單變量與多變量

request.file:

file = request.files['file']

print dir(file)

傳一個圖片

傳多張圖片

MultiDict

if file.filename.find('.') > 0:

       file_ext = file.filename.rsplit('.', 1)[1].strip().lower()

語法

rsplit() 方法語法:

1
S.rsplit([sep=None][,count=S.count(sep)])

參數

  • sep -- 可選參數,指定的分隔符,默認爲所有的空字符,包括空格、換行(\n)、製表符(\t)等。
  • count -- 可選參數,分割次數,默認爲分隔符在字符串中出現的總次數
二.標準存儲方式

def save_to_local(file, file_name):
    save_dir = app.config['UPLOAD_DIR']  
    file.save(os.path.join(save_dir, file_name))  #合併目錄
 
 
 return '/image/' + file_name@app.route('/image/<image_name>')def view_image(image_name): return send_from_directory(app.config['UPLOAD_DIR'], image_name)# flask.send_from_directory(directory, filename, **options)# Send a file from a given directory with send_file(). # This is a secure way to quickly expose static files from an upload folder or something similar.@app.route('/upload/', methods={"post"}):def upload(): file = request.files['file'] #request的files屬性爲請求中文件的數據 if file.filename.find('.') > 0: file_ext = file.filename.rsplit('.',1)[1].strip().lower() if file_ext in app.config['ALLOWED_EXT']: file_name = str(uuid.uuid1()).replace('-','')+'.'+file_ext #不用用戶的圖片名字,自己用uuid來產生一個新的名字 url = save_to_local(file, file_name) if url != None: db.session.add(Image(url, current_user.id)) db.session.commit() return redirect('/profile/%d' % current_user.id) 
# os.path.join('/hello/','good/boy/','doiido')
#'/hello/good/boy/doiido'
>>> seq1 =['hello','good','boy','doiido']
>>>print' '.join(seq1)
hello good boy doiido
>>>print':'.join(seq1)
hello:good:boy:doiido

request常用屬性:

https://www.cnblogs.com/wangjikun/p/6935592.html


三.雲存儲

本次使用qiniu雲,因爲註冊認證後會給10g的免費額度。

接下來首先看看官方的SDK-python

1.在pycharm裏install qiniu

2.

app.conf

ALLOWED_EXT=set(['png', 'jpg','jpeg','bmp','gif'])
UPLOAD_DIR='D:/upload/'
QINIU_ACCESS_KEY='aWbnpU2phR63jQJjEwmRmIjPWP0U8h3sho6OW0BA'
QINIU_SECRET_KEY='siL6VE2UCus1_Xl601nOLRA8ax4n4O8bi9iLqZo8'
QINIU_BUCKET_NAME='nowstagramimage'
QINIU_DOMAIN='http://p4n08apag.bkt.clouddn.com/'
qiniusdk.py

# -*- coding: utf-8 -*-
from nowstagram import app
from qiniu import Auth, put_stream, put_data
import os
access_key = app.config['QINIU_ACCESS_KEY']
secret_key = app.config['QINIU_SECRET_KEY']
# 構建鑑權對象
q = Auth(access_key, secret_key)
# 要上傳的空間
bucket_name = app.config['QINIU_BUCKET_NAME']
domain_prefix = app.config['QINIU_DOMAIN']

def qiniu_upload_file(source_file, save_file_name):
    # 上傳到七牛後保存的文件名
    # key = 'my-python-logo.png';
    # 生成上傳 Token,可以指定過期時間等
    token = q.upload_token(bucket_name, save_file_name)
    ret, info = put_data(token, save_file_name, source_file.stream)

    print(info)
    if info.status_code == 200:
        return domain_prefix + save_file_name
    return None

#view.py
@app.route('/upload/', methods={"post"})
def upload():
    file = request.files['file']  #request的files屬性爲請求中文件的數據<input 裏的name="file">
    if file.filename.find('.') > 0:
        file_ext = file.filename.rsplit('.',1)[1].strip().lower()
        if file_ext in app.config['ALLOWED_EXT']:
            file_name = str(uuid.uuid1()).replace('-','')+'.'+file_ext
            #不用用戶的圖片名字,自己用uuid來產生一個新的名字
            #url = save_to_local(file, file_name)
            #使用qiniu
            url = qiniu_upload_file(file, file_name)
            if url != None:
                db.session.add(Image(url, current_user.id))
                db.session.commit()

        return redirect('/profile/%d' % current_user.id)


可以進行雲實時縮圖:

<div class="img-box">
    <img src="{{ image.url }}?imageView/1/w/290/h/290">
</div>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章