Django處理文件上傳File Uploads

  • HttpRequest.FILES

  表單上傳的文件對象存儲在類字典對象request.FILES中。html

  file_obj = request.FILES.get('file', None)
  print(file_obj.name)
  print(file_obj.size)

  • UploadedFile

  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上傳:

待續... 

相關文章
相關標籤/搜索