Right now I am able to upload an attachment via Postman but when I try to do it in my Node.js project I get either a 404, 415 or 500 error. I have tried multiple times changing "Content-Type" to different types and adding and taking away headers but nothing seems to work.
Here is the code I have currently and this returns a 500 error:
const axios = require('axios');const fs = require('fs');
var FormData = require('form-data');
var formdata = new FormData();formdata.append("file", fs.createReadStream("../something.txt"));
const auth = { username: username, password: password}
axios.post("https://jira.ipgaxis.com/rest/api/2/issue/1461331/attachments", formdata, { auth: auth, headers: { "Content-Type": "multipart/form-data", "X-Atlassian-Token": "no-check" }}).then(function (response) { console.log(response);}).catch(function (error) { console.log(error);});
I have also tried clicking Code in postman and copying and pasting that exact code into my project. With that I get a successful 200 status code but the attachment isn't showing up in the issue.
Here is that code:
var fs = require("fs");var request = require("request");
var options = { method: 'POST', url: 'https://jira.ipgaxis.com/rest/api/2/issue/1461331/attachments', headers: { 'cache-control': 'no-cache', Connection: 'keep-alive', 'Content-Length': '585409', Cookie: 'atlassian.xsrf.token=A38F-68CD-ET7T-LQ4T_d01126d78cbef48b1897e71402a71625d6f2edc3_lin; AWSELB=97E58B57021817D47A66071828711D73B6F86E38E70A320BA71CC21064A19C52314FA745AE4F4CAD425452D5003971A3AF8CEFE4771007037D2825F3C2992B434FC45329DB; JSESSIONID=35440BB7BC39429962887AF36D56E75C', 'Accept-Encoding': 'gzip, deflate', Host: 'jira.ipgaxis.com', 'Postman-Token': '403e00fa-35e2-42b6-ba6b-b29b8fde3faa,882a64bd-5515-4bad-8ac3-f0675c6eaabb', 'Cache-Control': 'no-cache', Accept: '*/*', 'User-Agent': 'PostmanRuntime/7.17.1', Authorization: 'Basic aWFuLmtlbGxlckBtcm0tbWNjYW5uLmNvbTpNY2Nhbm43NzAwIQ==', 'X-Atlassian-Token': 'no-check', 'Content-Type': 'text/html', 'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' }, formData: { file: { value: fs.createReadStream("/Users/ian.keller/Desktop/USJ/nightwatch-test/new.html"), options: { filename: 'new.html', contentType: null } } } };
request(options, function (error, response, body) { if (error) throw new Error(error);
console.log(error); console.log(response)});
And here are screenshots of the code to get a better look:
This code is what got it working for me. You have to actually make a curl request in your Node project in order to upload an attachment to a Jira ticket. Pretty ridiculous but I couldn't find anything that worked better. To my knowledge it isn't possible with axios.
var exec = require('child_process').exec;var args = ' -D- -u admin:admin -X POST -H "X-Atlassian-Token: no-check" -F "file=@{filename}.html" https://{companyName}/rest/api/2/issue/{issueID}/attachments';exec('curl ' + args, function (error, stdout, stderr) { console.log('stdout: ' + stdout); console.log('stderr: ' + stderr); if (error !== null) { console.log('exec error: ' + error); }});
This works for me with Axios :)
const axios = require('axios');
const dotenv = require('dotenv');
const fs = require('fs');
const moment = require('moment');
const FormData = require('form-data')
dotenv.config();
uploadFileToConfluence: async function (pageId, fileTempName) {
let urlString = process.env.JIRA_DOMAIN + '/wiki/rest/api/content/' + pageId + '/child/attachment';
console.log(urlString);
const tok = process.env.ATLASSION_USER + ":" + process.env.ATLASSIAN_PASSWORD;
const hash = Buffer.from(tok).toString('base64');
const Basic = 'Basic ' + hash;
let formData = new FormData();
let stream = fs.createReadStream(fileTempName, 'utf8');
formData.append('file', stream);
let formHeaders = formData.getHeaders();
let res = await axios.post(urlString, formData, {
headers: {
'Accept': 'application/json',
'Authorization': Basic,
'X-Atlassian-Token': 'nocheck',
...formHeaders
}
});
console.log(res.status + " " + res.statusText);
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
This works for me with Axios :)
const axios = require('axios');
const dotenv = require('dotenv');
const fs = require('fs');
const moment = require('moment');
const FormData = require('form-data')
dotenv.config();
uploadFileToConfluence: async function (pageId, fileTempName) {
let urlString = process.env.JIRA_DOMAIN + '/wiki/rest/api/content/' + pageId + '/child/attachment';
console.log(urlString);
const tok = process.env.ATLASSION_USER + ":" + process.env.ATLASSIAN_PASSWORD;
const hash = Buffer.from(tok).toString('base64');
const Basic = 'Basic ' + hash;
let formData = new FormData();
let stream = fs.createReadStream(fileTempName, 'utf8');
formData.append('file', stream);
let formHeaders = formData.getHeaders();
let res = await axios.post(urlString, formData, {
headers: {
'Accept': 'application/json',
'Authorization': Basic,
'X-Atlassian-Token': 'nocheck',
...formHeaders
}
});
console.log(res.status + " " + res.statusText);
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Atlassian Government Cloud has achieved FedRAMP Authorization at the Moderate level! Join our webinar to learn how you can accelerate mission success and move work forward faster in cloud, all while ensuring your critical data is secure.
Register NowOnline forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.