【问题标题】:uploading a zip file with other data to ajax post for a django upload将带有其他数据的 zip 文件上传到 ajax 帖子以进行 django 上传
【发布时间】:2025-11-24 01:10:01
【问题描述】:

我正在使用 JSZIP 压缩来自 THREEJS 的网格对象,然后通过 ajax 发布请求将其上传到 django 模型。原则上和Uploading a zip file using POST in Javascript fails silently有点相似,但是我上传的数据比较多样化,目前失败了

JS

myButton.click(function(){
    var TempMesh = new THREE.Mesh(effect.generateGeometry(),effect.material); // requires THREE.js
    var zip = new JSZip();
    var the_exporter = new THREE.OBJExporter(); // requires THREE.OBJExporter()
    var result = the_exporter.parse(TempMesh);
    zip.file("Blob.obj", result.obj);
    zip.file("Blob.mtl", result.mtl);
    zip.generateAsync({type:"blob"}).then(
        function (blob) {
            var fileObj = new File([blob],"Blob.zip");
            var csrftoken = document.getElementsByName('csrfmiddlewaretoken')[0].value; // a div in my html template storing a temporary csrf token
            var data = new FormData();
            data.append("csrfmiddlewaretoken", csrftoken);
            data.append("the_file", fileObj);
            $.ajax({
                url: "THE_DJANGO_VIEW_URL",
                method: 'POST',
                data: data,
                contentType: false,
                processData: false,
                enctype: 'multipart/form-data',
                success: function (result, status, xhr) {//...},
                error: function (result, status, xhr) {//...}
            });
        }
    );

});

VIEWS.py

def MyView(request,pk):
    if request.method == 'POST':
        for keyVals in request.POST.keys():
            print('{} : {}'.format(keyVals,request.POST[keyVals]))

一旦视图收到 Post 请求,它就不会打印文件的密钥:

csrfmiddlewaretoken : 3QaJCh6VfgB...

这告诉我发送 zip 文件的方式不正确。任何想法? 此表单包含比 csrf 和 zip 文件更多的数据,用于创建 django 模型的新实例。

【问题讨论】:

    标签: post django-views ajaxform jszip


    【解决方案1】:

    刚刚意识到发送的文件是在request.FILES 下找到的,而不是在request.POST 下找到的。将此留给遇到类似问题的任何人。

    【讨论】:

      最近更新 更多