- HttpRequest.FILES
表單上傳的文件對象存儲在類字典對象request.FILES中。
file_obj = request.FILES.get('file', None)
print(file_obj.name)
print(file_obj.size)
- UploadedFile
UploadedFile是類文件對象,具有以下方法和屬性:
1. UploadedFile.read()
讀取整個上傳文件的數據,文件較大時慎用。
2. UploadedFile.multiple_chunks(chunk_size=None)
判斷文件是否足夠大,一般為2.5M
3. UploadedFile.chunks(chunk_size=None)
返回一個生成器對象,當multiple_chunks()為True時應該使用這個方法來代替read().
4. UploadedFile.name
上傳文件的name。
5. UploadedFile.size
上傳文件的大小。
6. UploadedFile.content_type
上傳文件時的content_type報頭,例如(e.g. text/plain or application/pdf).
7. UpladedFile.charset
編碼
上傳方式一:
表單上傳:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/upload_file/" method="post" enctype="multipart/form-data"> # 注意 enctype="multipart/form-data"
<input type="file" name="file"> <input type="submit" value="上傳"> </form>
</body>
</html>
后台:
def file_upload(request): if request.method == 'GET': return render(request, 'file_upload.html') elif request.method == 'POST': file_obj = request.FILES.get('file', None) print(file_obj.name) print(file_obj.size) with open('static/images/' + file_obj.name, 'wb') as f: for line in file_obj.chunks(): f.write(line) f.close() return HttpResponse('OK')
上傳方式二:
form 類上傳:
from類:
class FileForm(forms.Form):
file = fields.FileField()
前段:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/upload_file/" method="post" enctype="multipart/form-data"> {{ obj.file }} <input type="submit" value="上傳"> </form> </body> </html>
后台:
def file_upload(request): if request.method == 'GET': obj = FileForm() return render(request, 'file_upload.html', {'obj': obj}) elif request.method == 'POST': obj = FileForm(request.POST, request.FILES) # 必須填 request.POST if obj.is_valid(): print(obj.cleaned_data) # {'file': <InMemoryUploadedFile: image007.jpg (image/jpeg)>} with open('static/images/' + obj.cleaned_data['file'].name, 'wb') as f: for line in obj.cleaned_data['file'].chunks(): f.write(line) f.close() else: print(obj.errors) return HttpResponse('OK')
上傳方式三:
ajax上傳:
待續...