表單上傳的文件對象存儲在類字典對象request.FILES中。html
file_obj = request.FILES.get('file', None)
print(file_obj.name)
print(file_obj.size)
UploadedFile是類文件對象,具備如下方法和屬性:python
1. UploadedFile.read()ajax
讀取整個上傳文件的數據,文件較大時慎用。app
2. UploadedFile.multiple_chunks(chunk_size=None)post
判斷文件是否足夠大,通常爲2.5M編碼
3. UploadedFile.chunks(chunk_size=None)spa
返回一個生成器對象,當multiple_chunks()爲True時應該使用這個方法來代替read().code
4. UploadedFile.nameorm
上傳文件的name。htm
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上傳:
待續...