- An XML file that contains the code below is available to download
- slack-file-upload-bots.xml (C) Questetra, Inc. (MIT License)
- If you are using Professional, you can modify the contents of this file and use it as your own add-on
main();
function main() {
const oauth2 = configs.get("conf_OAuth2");
const channel = configs.get("ChannelName");
const filesDef = configs.getObject("File");
//check whether files exist or not
const files = engine.findData( filesDef );
if (files === null){
engine.log ("No File to upload");
return;
}
//check whether number of files is under the limit
const numOfFiles = files.length;
if (numOfFiles > httpClient.getRequestingLimit()){
throw "Number of Files is over the limit.";
}
for (let i = 0; i < numOfFiles; i++){
upload(oauth2,files[i],channel);
}
}
/**
* Upload File
* @param {String} oauth2
* @param {String} token
* @param {QfileView} file
* @param {String} channel
*/
function upload (oauth2,file,channel){
const url = 'https://slack.com/api/files.upload';
const response = httpClient.begin()
.authSetting(oauth2)
.multipart('file',file)
.multipart('channels',channel)
.post(url);
const status = response.getStatusCode();
const responseTxt = response.getResponseAsString();
let responseJson;
try {
responseJson = JSON.parse(responseTxt);
} catch(e) {
engine.log("failed to parse as json");
engine.log(`status: ${status}`);
engine.log(responseTxt);
throw `Failed to upload. status: ${status}`;
}
if (responseJson.ok !== true) {
const filename = file.getName();
const error = `Failed to upload\n filename: ${filename} error: ${responseJson.error}`;
engine.log(`status: ${status}`);
engine.log(responseTxt);
throw error;
}
}