Django框架 from django.core.files.uploadedfile import InMemoryUploadedFile
2019獨角獸企業重金招聘Python工程師標準>>>
作者:朱濤
鏈接:https://www.zhihu.com/question/23332111/answer/24239612
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。
model中一般會聲明為FileField或者ImageField(如果是圖片),使用multipart的form進行上傳,上傳后uploaded_file = request.FILES["file_name"]中會保存相應的文件數據,其中uploaded_file是InMemoryUploadedFile類型(
from django.core.files.uploadedfile import InMemoryUploadedFile),對于uploaded_file可以進行額外的處理(如使用PIL進行resize,保存為thumbnail等),而InMemoryUploadedFile可以直接賦值給FileField/ImageField,model save時相應的路徑就可以與model中聲明的關聯起來。
?
我之前寫的一個將上傳的image進行處理生成thumbnail,并且返回InMemoryUploadedFile的函數可以參考:
?
def get_thumbnail(orig, width=200, height=200):"""get the thumbnail of orig@return: InMemoryUploadedFile which can be assigned to ImageField"""quality = "keep"file_suffix = orig.name.split(".")[-1]filename = orig.nameif file_suffix not in ["jpg", "jpeg"]:filename = "%s.jpg" % orig.name[:-(len(file_suffix)+1)]quality = 95im = Image.open(orig)size = (width, height)thumb = imthumb.thumbnail(size, Image.ANTIALIAS)thumb_io = StringIO.StringIO()thumb.save(thumb_io, format="JPEG", quality=quality)thumb_file = InMemoryUploadedFile(thumb_io, None, filename, 'image/jpeg',thumb_io.len, None)return thumb_file?
使用時:
orig_image = request.FILES.get("photo") thumbnail = get_thumbnail(orig_image) user.photo = orig_image user.thumbnail = thumbnail user.save()轉載于:https://my.oschina.net/u/2603728/blog/784872
總結
以上是生活随笔為你收集整理的Django框架 from django.core.files.uploadedfile import InMemoryUploadedFile的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于STM32 IAP
- 下一篇: 8分钟回顾开源巨头 Facebook 的