Я использую Slack API files.upload для загрузки документа Excel, полученного из ответа AJAX. Я использую AJAX jQuery для загрузки, и файл загружается правильно, за исключением того, что он поврежден. Когда я открываю файл, загруженный из Slack, он содержит много «?» и других символов, указывающих на плохую кодировку. Загрузка файла, а затем загрузка с помощью инструмента тестирования работает правильно и не привести к коррупции.
Наиболее важной частью является 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. Это должна быть кодировка.