使用files.upload API将Excel上传到Slack - 文件上传,但已损坏

时间:2017-03-26 06:58:37

标签: javascript jquery ajax slack-api

我正在使用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下载响应并且文件以相同的方式被破坏,因此它与Slack的POST无关。它必须是编码。

1 个答案:

答案 0 :(得分:1)

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

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