Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Upload attachment using REST API from C#.NET

Basanta Padhi
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
September 28, 2018 edited

Hi,

We are creating a tool to migrate Versionone  data to JIRA. So for this I am consuming REST APIs mentioned in "https://developer.atlassian.com/cloud/jira/platform/rest/v3/#api-api-3-issue-issueIdOrKey-remotelink-linkId-put". I am struggling to upload an attachment to an issue. All the time I am getting Statuscode as "200" but there is no attachment to the issue in JIRA. Here in below is my code, please suggest me what I am doing wrong here. 

Snippet

SendFileToServer("XYZ-315");

Snippet


private
 void SendFileToServer(string IssueKey)         {             FileInfo fi = new FileInfo(@"C:\VersionOneAttachments\some.png");             ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;             byte[] fileContents = File.ReadAllBytes(fi.FullName);
//https://your-domain.atlassian.net/rest/api/2/issue/XYZ-315/attachments             string urlPath = ConfigurationSettings.AppSettings.Get("JIRAURLForCreateIssue").ToString();             Uri webService = new Uri(string.Format("{0}/{1}/attachments", urlPath, IssueKey));             HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, webService);             requestMessage.Headers.ExpectContinue = false;             MultipartFormDataContent multiPartContent = new MultipartFormDataContent("----MyGreatBoundary");             ByteArrayContent byteArrayContent = new ByteArrayContent(fileContents);             byteArrayContent.Headers.Add("Content-Type""image/png");             byteArrayContent.Headers.Add("X-Atlassian-Token""no-check");             multiPartContent.Add(byteArrayContent, "this is the name of the content", fi.Name);             requestMessage.Content = multiPartContent;             HttpClient httpClient = new HttpClient();             httpClient.DefaultRequestHeaders.Add("Authorization"ConfigurationSettings.AppSettings.Get("JiraAuthorizationKey").ToString());             httpClient.DefaultRequestHeaders.Add("X-Atlassian-Token""no-check");             try             {                 Task<HttpResponseMessage> httpRequest = httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseContentRead, CancellationToken.None);                 HttpResponseMessage httpResponse = httpRequest.Result;                 HttpStatusCode statusCode = httpResponse.StatusCode;                 HttpContent responseContent = httpResponse.Content;                 if (responseContent != null)                 {                     Task<String> stringContentsTask = responseContent.ReadAsStringAsync();                     String stringContents = stringContentsTask.Result;                 }             }             catch (Exception ex)             {                 Console.WriteLine(ex.Message);             }         }

 

Any idea will be appreciated.

 

Thanks in advance

Basanta Padhi

2 answers

2 votes
anand1093
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
February 11, 2019

Hi @Basanta Padhi

I got solution!

just change

multiPartContent.Add(byteArrayContent, "this is the name of the content", fi.Name);

to

multiPartContent.Add(byteArrayContent, "file", fi.Name);

 It's worked.

 

Thanks,

Anand Kumar

Kevin Lapio
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
September 11, 2019

Thank you, @Basanta Padhi and @anand1093, both!  Your code snippets helped get me up and running in a hurry!

0 votes
anand1093
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
February 11, 2019

Hi @Basanta Padhi,

I'm also facing this problem. Did you got solution?

Please share solution if you got.

Thanks,

Anand Kumar

Chandan Prajapati June 11, 2020

public static void SendFileToServer(string issueKey)
{
FileInfo fi = new FileInfo(@"C:\Downloads\filename.xlsx");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
byte[] fileContents = File.ReadAllBytes(fi.FullName);

//https://your-domain.atlassian.net/rest/api/2/issue/XYZ-315/attachments
string urlPath = "https://your-domain.atlassian.net/rest/api/2/issue/" + issueKey + "/attachments";
//Uri webService = new Uri(string.Format("{0}/{1}/attachments", urlPath, IssueKey));
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, urlPath);
requestMessage.Headers.ExpectContinue = false;

MultipartFormDataContent multiPartContent = new MultipartFormDataContent("----MyGreatBoundary");
ByteArrayContent byteArrayContent = new ByteArrayContent(fileContents);
byteArrayContent.Headers.Add("Content-Type", "image/png");
byteArrayContent.Headers.Add("X-Atlassian-Token", "no-check");
multiPartContent.Add(byteArrayContent, "file", fi.Name);
requestMessage.Content = multiPartContent;

HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(Settings.JiraUserName + ":" + Settings.JiraAPIToken)));
httpClient.DefaultRequestHeaders.Add("X-Atlassian-Token", "no-check");
try
{
Task<HttpResponseMessage> httpRequest = httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseContentRead, CancellationToken.None);
HttpResponseMessage httpResponse = httpRequest.Result;
HttpStatusCode statusCode = httpResponse.StatusCode;
HttpContent responseContent = httpResponse.Content;

if (responseContent != null)
{
Task<String> stringContentsTask = responseContent.ReadAsStringAsync();
String stringContents = stringContentsTask.Result;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

chandana_makam
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
August 5, 2020 edited

Hi, the code is getting executed. But particular excel or png is not getting uploaded in JIRA attachment. Can you please help me with this Chandan prajapati.

helpdesk
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
July 18, 2023

I'm trying to add attachment through the above code and getting this response. Can anyone help me with this. 

StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Timing-Allow-Origin: *
X-Arequestid: 4fd8a5843528593fd5f6f4675ebc0fe9
X-Seraph-Loginreason: AUTHENTICATED_FAILED
X-Content-Type-Options: nosniff
X-Xss-Protection: 1; mode=block
Atl-Traceid: 991dd907e1623a5c
Report-To: {"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": "endpoint-1", "include_subdomains": true, "max_age": 600}
Nel: {"failure_fraction": 0.001, "include_subdomains": true, "max_age": 600, "report_to": "endpoint-1"}
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Transfer-Encoding: chunked
Cache-Control: no-store, no-transform, no-cache
Date: Tue, 18 Jul 2023 18:58:51 GMT
Set-Cookie: atlassian.xsrf.token=B659-IW08-H939-Y50O_58c27279e8f737f89f2c485a7701855499fe5be8_lout; path=/; SameSite=None; Secure
Server: AtlassianEdge
Content-Type: application/json; charset=UTF-8
}}

Suggest an answer

Log in or Sign up to answer
TAGS
atlassian, loom, loom for training, loom for teaching, video training, async learning, online education, screen recording, loom tutorials, loom use cases, atlassian learning, team training tools, instructional video, virtual training tools

🛗 Elevate Your Training and Enablement with Loom

Join us June 26, 11am PT for a webinar with Atlassian Champion Robert Hean & Loom’s Brittany Soinski. Hear tips, stories, and get your burning questions answered. Learn how Loom makes training and enablement easier. Don’t miss it!

Register today
AUG Leaders

Atlassian Community Events