通过 REST API 向 Jira 添加附件 [英] Add Attachment to Jira via REST API

查看:62
本文介绍了通过 REST API 向 Jira 添加附件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用最新的 REST API 发布 JIRA 附件.这是我的代码:

I'm trying to post an attachment o JIRA using the latest REST API. Here's my code:

public boolean addAttachmentToIssue(String issueKey, String path){

        String auth = new 

String(org.apache.commons.codec.binary.Base64.encodeBase64((user+":"+pass).getBytes()));


    Client client = Client.create();
    WebResource webResource = client.resource(baseURL+"issue/"+issueKey+"/attachments");


    FormDataMultiPart formDataMultiPart = new FormDataMultiPart();

        File f = new File(path);
        if(f.exists() && f.isFile()){
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(f);
            } catch (FileNotFoundException e) {
                return false;
            }

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            try {
                for (int readNum; (readNum = fis.read(buf)) != -1;) {
                    bos.write(buf, 0, readNum); //no doubt here is 0
                }
                fis.close();
                bos.close();
            } catch (IOException ex) {
                try {
                    fis.close();
                    bos.close();
                } catch (IOException e) {
                    return false;
                }
                return false;
            }
            byte[] bytes = bos.toByteArray();

            FormDataBodyPart bodyPart = new FormDataBodyPart("file", new ByteArrayInputStream(bytes), MediaType.APPLICATION_OCTET_STREAM_TYPE);
             formDataMultiPart.bodyPart(bodyPart);
    }else{
        return false;
    }

    ClientResponse response = null;

    response = webResource.header("Authorization", "Basic " + auth).header("X-Atlassian-Token", "nocheck").type(MediaType.MULTIPART_FORM_DATA).accept("application/json").post(ClientResponse.class, formDataMultiPart);
    System.out.println(response);

    int statusCode = response.getStatus();
    System.out.println(statusCode);
    String resp = response.getEntity(String.class);
    System.out.println(resp);

    return true;
}

但是,我得到以下回复:

However, i get the following response:

POST http://localhost:8082/rest/api/2/issue/TEST-2/attachments returned a response status of 404 Not Found
404
XSRF check failed

密钥 TEST-2 的问题确实存在于我的本地 JIRA 实例中,我可以在 Jira 应用程序本身中手动"添加附件.我知道我必须添加一个X-Atlassian-Token:nocheck"类型的标题来防止 XSRF,但是,根据输出,我一定做错了什么..更让我困惑的是,XSRF 检查失败后会抛出 404.

An Issue with key TEST-2 does exist in the my local JIRA instance and I can add the attachment "by hand" in the Jira app itself. I know that i must add a header of type "X-Atlassian-Token:nocheck" to prevent XSRF, but, by the output, I must be doing something wrong.. What confuses me even further is that a 404 is thrown after the XSRF check failed.

我在谷歌上搜索了答案但没有成功任何人都可以猜测我做错了什么吗?

I've scavenged google for answers with no success Can anyone hazard a guess to what I'm doing wrong?

推荐答案

我已经通过使用 apache http 客户端解决了这个问题对于谁可能有同样的问题,这里是代码:

I've managed to resolve the issue by using the apache http client For whom may have the same issue, here's the code:

public boolean addAttachmentToIssue(String issueKey, String path){


        String auth = new String(org.apache.commons.codec.binary.Base64.encodeBase64((user+":"+pass).getBytes()));


    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(baseURL+"issue/"+issueKey+"/attachments");
    httppost.setHeader("X-Atlassian-Token", "nocheck");
    httppost.setHeader("Authorization", "Basic "+auth);
    MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

    File fileToUpload = new File(path);
    FileBody fileBody = new FileBody(fileToUpload, "application/octet-stream");
    entity.addPart("file", fileBody);

    httppost.setEntity(entity);
    HttpResponse response = null;
    try {
        response = httpclient.execute(httppost);
    } catch (ClientProtocolException e) {
        return false;
    } catch (IOException e) {
        return false;
    }
    HttpEntity result = response.getEntity();

    if(response.getStatusLine().getStatusCode() == 200)
        return true;
    else
        return false;

}

这篇关于通过 REST API 向 Jira 添加附件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆