zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    android常用工具类
    SharedPreferences的工具类
    Dialog对话框管理工具类
    Logger日志管理工具类
    android 复制、粘贴文字
    sd卡文件操作
    AndroidManifest.xml file missing 解决方案
    Jar mismatch! Fix your dependencies
    时间戳和字符串之间的互相转换
    常见块元素和内联元素
  • 原文地址:https://www.cnblogs.com/ZFBG/p/11434711.html
Copyright © 2011-2022 走看看