1. 程式人生 > >django之上傳圖片

django之上傳圖片

chunk pil 打開 處理 return action efi pic set

上傳圖片

  • 當Django在處理文件上傳的時候,文件數據被保存在request.FILES
  • FILES中的每個鍵為<input type="file" name="" />中的name
  • 註意:FILES只有在請求的方法為POST 且提交的<form>帶有enctype="multipart/form-data" 的情況下才會包含數據。否則,FILES 將為一個空的類似於字典的對象
  • 使用模型處理上傳文件:將屬性定義成models.ImageField類型
pic=models.ImageField(upload_to=‘cars/‘)
  • 註意:如果屬性類型為ImageField需要安裝包Pilow
pip install Pillow==3.4.1
  • 圖片存儲路徑
    • 在項目根目錄下創建media文件夾
    • 圖片上傳後,會被保存到“/static/media/cars/圖片文件”
    • 打開settings.py文件,增加media_root項
MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")
  • 使用django後臺管理,遇到ImageField類型的屬性會出現一個file框,完成文件上傳
  • 手動上傳的模板代碼
<html>
<head>
    <title>文件上傳</title>
</head>
<body>
    <form method="post" action="upload/" enctype="multipart/form-data">
        <input type="text" name="title"><br>
        <input type="file" name="pic"/><br>
        <input type="submit" value="上傳">
    </form>
</body>
</html>
  • 手動上傳的視圖代碼
from django.conf import settings

def upload(request):
    if request.method == "POST":
        f1 = request.FILES[‘pic‘]
        fname = ‘%s/cars/%s‘ % (settings.MEDIA_ROOT,f1.name)
        with open(fname, ‘w‘) as pic:
            for c in f1.chunks():
                pic.write(c)
        return HttpResponse("ok")
    else:
        return HttpResponse("error")

django之上傳圖片