我正在使用 Slack 的files.upload API 上传从 AJAX 响应中检索到的 Excel 文档。我正在使用 jQuery 的 AJAX 进行上传,并且文件正在正确上传,但已损坏。当我打开从Slack下载的文件时,它包含许多“?”和其他表示不良编码的字符。下载文件,然后使用 Slack 的测试工具上传,可以正常工作并且不会导致损坏。
最相关的部分是ajaxConfig
; 这是传递给 jQueryajax()
方法的对象。
self.getClient().runReport({
query: queryString,
success: function(response){
var formEnc = new FormData();
formEnc.append('file', new Blob([response], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}), 'filename.xls');
self.getClient().slackFile({
filename: 'MyReport.xls',
channel: '%23my-channel',
ajaxConfig: {
method: 'post',
data: formEnc,
processData: false,
contentType: false,
mimeType: 'multipart/form-data',
success: function(response){
resolve(response);
},
error: function(response){
reject(response);
}
}
});
},
error: function(msg){
reject(msg);
}
});
我已经尝试了不同类型的Blob
和mimeType
没有成功,但我不认为这是问题所在,因为我发送的 POST 请求看起来与 Slack 的测试工具生成的请求相同(它上传了文件而没有损坏)。我怀疑问题一定在于我如何编码我得到的响应runReport
(请记住,我可以手动下载该文件就好了)。
更新我使用FileSaver.js下载响应并且文件以相同的方式损坏,因此它与 POST 到 Slack 无关。它必须是编码。
它最终成为由 jquery 引起的编码问题。使用直接xhr时,上传工作正常。
var req = new XMLHttpRequest();
req.open(method, url);
req.responseType = 'arraybuffer';
req.onload = function(){
success(req.response);
};
req.send();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句