Django - 實現簡單的檔案上傳功能
阿新 • • 發佈:2018-11-22
前端
<form action="" method="post" enctype="multipart/form-data"> {#<form action="" method="post" enctype="application/x-www-form-urlencoded">#} <input type="file" name="myfile"> <input type="submit" value="提交"> </form> ''' 必須進行配置,且前二者解決編碼問題,即可解決中文傳輸亂碼問題 enctype="multipart/form-data" :不對字元編碼。在使用包含檔案上傳控制元件的表單時,必須使用該值。 enctype="application/x-www-form-urlencoded" : 在傳送前編碼所有字元(預設) enctype="text/plain" : 空格轉換為 "+" 加號,但不對特殊字元編碼。 '''
檢視函式
from django.shortcuts import render, HttpResponse import os,time def fileupload(request): if request.method == 'GET': return render(request, 'fileupload.html') if request.method == 'POST': # FILES print(request.FILES) # <MultiValueDict: {'myfile': [<InMemoryUploadedFile: 1.png (image/png)>]}> print(type(request.FILES.get('myfile'))) # <class 'django.core.files.uploadedfile.InMemoryUploadedFile'> # from django.core.files.uploadedfile import InMemoryUploadedFile # 從字典里根據名字,把檔案取出來 myfile = request.FILES.get('myfile') print(myfile) print(type(myfile)) # 1.png # <class 'django.core.files.uploadedfile.InMemoryUploadedFile'> # 檔名字 name = myfile.name print(name) print(type(name)) # 1.png # <class 'str'> # 若存在相同檔案,通過時間戳改名再上傳 if os.path.exists(name): # return HttpResponse('false') now = time.strftime('_%Y%m%d%H%M%S') name = name.replace('.',now+'.') print(name) # 開啟檔案,把上傳過來的檔案通過檔案處理,迴圈存到本地 with open(name, 'wb') as f: # for line in myfile.chunks(): 等同於 for line in myfile: for line in myfile: f.write(line) # 儲存成功 返回前端資料 return HttpResponse('ok')