我正在使用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模型的新实例。
答案 0 :(得分:0)
仅意识到已发送的文件位于request.FILES
下,而不是request.POST
下。将此留给遇到类似问题的任何人。