post - 将带有其他数据的 zip 文件上传到 ajax 帖子以进行 django 上传
问题描述
我正在使用JSZIP
压缩来自的网格对象THREEJS
,然后通过 ajax 发布请求将其上传到 django 模型。原则上,它有点类似于:在 Javascript 中使用 POST 上传 zip 文件失败,但我上传的数据更多样化,目前失败
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) {//...}
});
}
);
});
视图.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 模型的新实例。
解决方案
刚刚意识到发送的文件是在request.FILES
而不是request.POST
. 将此留给遇到类似问题的任何人。
推荐阅读
- asp.net - 为什么 IIS 有时会显示错误页面的 aspx 源代码?
- java - 使用适用于 Java 的 AWS 开发工具包版本 2 从 URL 下载文件并将其上传到 AWS S3,而无需保存到内存中
- javascript - Chrome 扩展中的 Web3js 脚本注入
- php - 45Mb 表需要写入约 5Gb 字节来插入数据 PHP SQL PDO
- javascript - 打字稿类型转换对象,因此特定的必需键在类型中不再是可选的?
- shell - 如何将多个 RSS 提要合并为一个?
- javascript - 通过 JavaScript reactjs 遍历复杂的嵌套 json 对象
- django - Django 后续 StringAgg 与分组
- java - 如何在 Hibernate 中使用限制
- qa - 字体颜色与ui规范不对应的错误严重程度如何?