一: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)) #合併目錄
# os.path.join('/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>