【发布时间】:2017-08-18 22:55:42
【问题描述】:
我正在使用 Slack 的 files.upload API 上传从 AJAX 响应中检索到的 Excel 文档。我正在使用 jQuery 的 AJAX 进行上传,并且文件正在正确上传,但它已损坏。当我打开从 Slack 下载的文件时,它包含许多“?”和其他指示错误编码的字符。下载文件然后使用 Slack 的tester tool 上传,可以正常工作并且不会导致损坏。
最相关的部分是ajaxConfig;这是传递给 jQuery 的 ajax() 方法的对象。
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 无关。一定是编码。
【问题讨论】:
-
我不是 Javascript 专家,但这看起来像是数据编码问题。这个答案可能会有所帮助:stackoverflow.com/questions/19959072/…
标签: javascript jquery ajax slack-api