Yellow 就怕你碌碌无为,还安慰自己平凡可贵 -------------yolo

django 文件上传样例以及遇到的一些问题

使用django上传文件 主流有两种方法 from表单以及ajax,为了自由度高一点,选择了ajax来实现文件的上传

前端部分代码如下: 主要关注 

一 有一个文件上传(type='file')的按钮,绑定了id f

二 有一个submit按钮来确认文件上传 绑定id  FileUpload

  <div class="form-group">
                  <label for="exampleInputFile">File input</label>
                  <input type="file" id="f">
                  <p class="help-block">Example block-level help text here.</p>
                </div>
              </div>
              <!-- /.box-body -->
              <div class="box-footer">
                <button type="submit" class="btn btn-primary"  id="FileUpload">Submit</button>
              </div>
          </div>

JS代码如下

需要注意的是 绑定了submit点击事件,点击了之后通过FromData 方法 把文件以字典  f  : $("#f")[0].files[0]); 方式传递给前端 $("#f")[0]是把JQ转换为JS对象

files[0]是获取文件,因为可能有很多文件,这里的意思是获取第一个文件。
$("#FileUpload").click(function () {
        var formdata = new FormData();
        formdata.append("csrfmiddlewaretoken", $("[name='csrfmiddlewaretoken']").val());
        formdata.append("f", $("#f")[0].files[0]);
   //     console.log("asdasdas")
    $.ajax({
            url: "/assets/api/",
            type: "post",
            data: formdata,
            contentType: false,
            processData: false,
            success: function (data) {
                alert("上传成功!")
            }
        })

    })

 

后端代码

通过mession的值做不同的任务

def api(request):if request.method == "POST" and request.POST.get('mession') == "fileupload":
        f_obj = request.FILES.get("f")
        print(f_obj)
        name = f_obj.name
        print(name)

        destination = open(os.path.join("/opt/upload", name), 'wb+')  # 打开特定的文件进行二进制的写操作
        for chunk in f_obj.chunks():  # 分块写入文件
            destination.write(chunk)
        destination.close()

        return HttpResponse("上传成功")

 

在文件传输的过程中,发现部分文件无法传输,发现django对文件的大小有限制,修改settings.py配置文件

from django.core.files.uploadedfile import InMemoryUploadedFile
from django.core.files.uploadhandler import TemporaryFileUploadHandler
FILE_UPLOAD_HANDLERS = [
    'django.core.files.uploadhandler.MemoryFileUploadHandler',
    'django.core.files.uploadhandler.TemporaryFileUploadHandler',
]

FILE_UPLOAD_MAX_MEMORY_SIZE = 8621440
DATA_UPLOAD_MAX_MEMORY_SIZE = 8621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 5000

 

posted @ 2019-08-30 14:12  zfno11  阅读(460)  评论(0编辑  收藏  举报