Ajax文件上传REST接口返回415错误,求技术解决方案
解决文件上传Ajax调用返回415错误的问题
嘿,我看到你在做Atlassian生态下的文件上传时碰到了415(Unsupported Media Type)错误,咱们一步步排查解决:
首先修复代码里的明显错误
你创建了FormData对象并赋值给了data变量,但在Ajax配置里却把data属性设成了file——这会导致实际没有传递正确的表单数据,这很可能是触发415错误的核心原因。
修正后的完整Ajax代码如下:
var data = new FormData(AJS.$('#upload-file')[0]); AJS.$.ajax({ type: "POST", url: getAttachmentUrl(), data: data, // 这里把原来的`file`改为`data` dataType: "json", cache: false, processData: false, contentType: false, headers: { "X-Atlassian-Token": "nocheck" // 确保令牌完整,通常是"nocheck" }, success: function(response) { console.log("上传成功", response); }, error: function(xhr, status, error) { console.error("上传失败,状态码:", xhr.status, "错误信息:", error); } });
额外检查点(如果修正后仍有问题)
- 验证接口兼容性:确认
getAttachmentUrl()返回的REST接口确实支持multipart/form-data类型的请求,有些接口可能只接受JSON格式,这时候就需要调整上传方式。 - 确保文件已选中:在发起请求前,可以加个判断,确保用户已经选择了要上传的文件:
var fileInput = AJS.$('#file')[0]; if (fileInput.files.length === 0) { alert("请先选择要上传的文件"); return; } - XSRF令牌正确性:Atlassian产品的XSRF令牌如果是动态生成的,要确保你获取的是当前页面的有效令牌,而不是硬编码的"nocheck"(虽然部分场景下"nocheck"是允许的,但最好按官方规范来)。
内容的提问来源于stack exchange,提问作者Roberts Kalderauskis
相关产品推荐
相关产品推荐

