Django框架(十五:表單中圖片的上傳)
阿新 • • 發佈:2018-12-20
圖片的上傳,就是後臺獲取表單傳過來的圖片並儲存。需要實現兩部分,一部分是將圖片的路徑儲存到資料庫,另一部分是把圖片檔案上傳到後臺。 下面來執行具體的操作:
- 由於上傳圖片時預設儲存在根目錄下的,所以需在settings.py檔案中配置圖片上傳的路徑
- 定義一個Model類,在Model中宣告一個用於儲存圖片地址的欄位,放在資料庫的表中;(此處不再展示程式碼)
- 在html檔案中新增上傳圖片的表單。input的type值必須為file
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>圖片上傳</title> </head> <body> <form action="/upload/" method="post" enctype="multipart/form-data"> {# application/x-www-form-urlencoded: username='123'&password='456' 適合文字 #} {# multipart/form-data: 以指定的分隔符對上傳資料進行分割 適合二進位制檔案 #} {# 上傳圖片相當於上傳資料,一定要使用POST請求,並且要指定一個屬性enctype #} {% csrf_token %} <input type="file" name="picture"> <button type="submit">上傳</button> </form> <img src="/static/media/{{ img.pic_url }}" alt=""> </body> </html>
- 路由就自己配置了,接下來在views.py檔案中程式碼實現,具體的作用,已經註釋
def uploadimg(request): if request.method == 'GET': # img = PictureModel.objects.get(id=18) # return render(request, 'index.html', {'img': img}) return render(request, 'index.html') else: # 需要從表單input中,獲取上傳的檔案物件(圖片) pic = request.FILES.get('picture') # 1. 建立Model物件,儲存圖片路徑到資料庫 model = PictureModel() model.pic_url = pic.name model.save() # 2. 開始處理圖片,將圖片寫入到指定目錄。(/static/media/images/) # 拼接圖片路徑 url = settings.MEDIA_ROOT + 'images/' + pic.name with open(url, 'wb') as f: # pic.chunks()迴圈讀取圖片內容,每次只從本地磁碟讀取一部分圖片內容,載入到記憶體中,並將這一部分內容寫入到目錄下,寫完以後,記憶體清空;下一次再從本地磁碟讀取一部分資料放入記憶體。就是為了節省記憶體空間。 for data in pic.chunks(): f.write(data) return HttpResponse('圖片上傳成功')