Python的Tornado框架實(shí)現(xiàn)圖片上傳及圖片大小修改功能
圖片的上傳
上傳圖片使用了表單提交, 下面是html部分, enctype="multipart/form-data"表示不對(duì)字節(jié)進(jìn)行編碼,上傳文件類型時(shí)需指定. input標(biāo)簽的 type="file" 指定上傳類型.
<form action="/" enctype="multipart/form-data" method="post"> <input type="file" name="headimg"> </form>
下面是tornado接受文件的部分
class UploadHandler(BaseHandler):
def post(self):
# 這部分就是上傳的文件,想要查看更多可以print self.request看看
# 該文件返回一個(gè)元素為字典的列表
imgfile = self.request.files.get('headimg')
for img in imgfile:
# img有三個(gè)鍵值對(duì)可以通過img.keys()查看
# 分別是 'filename', 'body', 'content_type' 很明顯對(duì)應(yīng)著文件名,內(nèi)容(二進(jìn)制)和文件類型
with open('./static/uploads/' + img['filename'], 'wb') as f:
# 文件內(nèi)容保存 到'/static/uploads/{{filename}}'
f.write(f['body'])
這樣就可以通過/static/uploads/文件名的形式訪問
對(duì)圖片大小進(jìn)行修改
下面將寫對(duì)圖片進(jìn)行的resize
class UploadHandler(BaseHandler):
@tornado.web.authenticated
def post(self):
# 應(yīng)該寫到上面, 為了顯示寫到了函數(shù)內(nèi)
import time
# PIL 是 python中對(duì)圖片進(jìn)行操作的模塊, 感興趣可以去看一下
from PIL import Image
# 可以想文件一樣使用, 只是存放在內(nèi)存
from cStringIO import StringIO
# 判斷上傳文件大小
size = int(self.request.headers.get('Content-Length'))
if size / 1000.0 > 2000:
self.write("上傳圖片不能大于2M.")
imgfile = self.request.files.get('headimg')
for img in imgfile:
# 對(duì)文件進(jìn)行重命名
name = str(time.strftime('%Y%m%d%'), time.localtime())\
+ '_' + self.current_user + '_headimg.png'
with open('./static/uploads/' + name, 'wb') as f:
# image有多種打開方式,一種是 Image.open('xx.png')
# 另一種就是 Image.open(StringIO(buffer))
im = Image.open(StringIO(img['body']))
# 修改圖片大小resize接受兩個(gè)參數(shù), 第一個(gè)是寬高的元組數(shù)據(jù),第二個(gè)是對(duì)圖片細(xì)節(jié)的處理,本文表示抗鋸齒
im = im.resize((72, 72), Image.ANTIALIAS)
# 打開io 就像文件一樣
im_file = StringIO()
im.save(im_file, format='png')
# 這是獲取io中的內(nèi)容
im_data = im_file.getvalue()
f.write(im_data)
這樣就可以上傳的時(shí)候?qū)ξ募笮∵M(jìn)行修改
相關(guān)文章
python pandas模塊進(jìn)行數(shù)據(jù)分析
Python的Pandas模塊是一個(gè)強(qiáng)大的數(shù)據(jù)處理工具,可以用來讀取、處理和分析各種數(shù)據(jù),本文主要介紹了python pandas模塊進(jìn)行數(shù)據(jù)分析,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
Python定時(shí)發(fā)送天氣預(yù)報(bào)郵件代碼實(shí)例
這篇文章主要介紹了Python定時(shí)發(fā)送天氣預(yù)報(bào)郵件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
基于Python實(shí)現(xiàn)電影售票系統(tǒng)
這篇文章主要介紹了通過Python實(shí)現(xiàn)一個(gè)簡單的電影售票系統(tǒng),文中的示例代碼對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-12-12
三步解決python PermissionError: [WinError 5]拒絕訪問的情況
這篇文章主要介紹了三步解決python PermissionError: [WinError 5]拒絕訪問的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python編寫的com組件發(fā)生R6034錯(cuò)誤的原因與解決辦法
pythoncom27.dll可能沒有包含manifest信息,或者沒有包含正確的manifest信息,或者系統(tǒng)中的c++ runtime library受到破壞都有可能造成這種現(xiàn)象2013-04-04
Python數(shù)據(jù)分析之使用matplotlib繪制折線圖、柱狀圖和柱線混合圖
matplotlib是python的一個(gè)模塊,用于繪制各種圖形,今天介紹一下折線圖的繪制,下面這篇文章主要給大家介紹了關(guān)于Python數(shù)據(jù)分析之使用matplotlib繪制折線圖、柱狀圖和柱線混合圖的相關(guān)資料,需要的朋友可以參考下2022-05-05

