【问题标题】:Upload Excel to Slack using files.upload API - file uploads, but is corrupted使用 files.upload API 将 Excel 上传到 Slack - 文件上传,但已损坏
【发布时间】: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);
    }
});

我尝试了 BlobmimeType 的不同类型但没有成功,但我认为这不是问题,因为我发送的 POST 请求看起来与 Slack 生成的请求相同测试工具(它上传的文件没有损坏)。我怀疑问题一定出在我如何编码从runReport 获得的响应(请记住,我可以手动下载该文件就好了)。


更新 我使用FileSaver.js 下载响应并且文件以相同的方式损坏,因此它与 POST 到 Slack 无关。一定是编码。

【问题讨论】:

标签: javascript jquery ajax slack-api


【解决方案1】:

它最终是由 jquery 引起的编码问题。使用直接 xhr 时,上传工作正常。

var req = new XMLHttpRequest();
req.open(method, url);
req.responseType = 'arraybuffer';
req.onload = function(){
    success(req.response);
};
req.send();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    相关资源
    最近更新 更多