Django處理文件上傳File Uploads


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

待續... 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM