当前位置: 首页 > 面试题库 >

通过REST API将附件添加到Jira

祖波光
2023-03-14
问题内容

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

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;
}

但是,我得到以下回应:

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

我的本地JIRA实例中确实存在密钥TEST-2的问题,我可以在Jira应用程序本身中“手动”添加附件。我知道我必须添加类型为“ X-Atlassian-
Token:nocheck”的标头以防止XSRF,但是从输出来看,我必须做错了什么。令我更加困惑的是,在XSRF检查失败。

我已经在Google上搜寻了没有成功的答案,有人能猜出我在做什么错吗?


问题答案:

我已经通过使用apache http客户端解决了该问题,对于那些可能存在相同问题的人,下面的代码是:

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的附件。这是我的代码: 然而,我得到了以下回应: 我的本地JIRA实例中确实存在密钥TEST-2问题,我可以在JIRA应用程序中“手动”添加附件。我知道我必须添加一个类型为“X-Atlassian-Token:nocheck”的头来防止XSRF,但是,从输出来看,我一定是做错了什么。。更让我困惑的是,在XSRF检查失败后抛出了404。 我在谷歌上搜索

  • 问题内容: 假设我有一些要将JavaScript操作添加到的链接: 当页面加载时,我给他们所有的click事件: 但让我们说之后,我添加了另一个元素,但我想给它相同的事件。我不能这样做: 因为前三个事件将包含两个事件。处理此问题的最佳方法是什么? 问题答案: 您可以将$ .on绑定到这样的dom中始终存在的父元素。 请注意: 您可以用dom中将始终存在的元素的任何父级替换,并且父级越近越好。 具有

  • 我正在使用TCPDF从php文件创建PDF文件。一切正常。现在,我想使用现有页面添加一个附加页面。来自服务器的pdf文件。 最好的方法是使用FPDI afaik。 但我找不到任何关于如何在TCPDF中设置FPDI以添加页面的文档或工作示例。我所看到的只是如何使用外部pdf作为标题或背景等。 像这个https://www.setasign.com/products/fpdi/about/ 我在TCP

  • 尝试Recycerview-StickyHeaders库:http://eowise.github.io/Recycerview-StickyHeaders/ 在使用这个库时,发现它监听基于OnItemTouchListener的整个header。有没有一种方法可以收听个人视图上的点击? 除此之外,我尝试直接在BigramHeaderAdapter(库示例中的头适配器)中添加OnClickList

  • 我想从外部源向fullcalendar jquery插件添加一个事件。我需要事件标题;开始日期和结束日期。我读到回调函数是在您将外部源放到日历上时调用的。这将报告警报中的开始日期。选项显示事件的标题。此警报在回调后显示。这是代码: 如何从函数的回调中获取开始日期值?

  • 问题内容: 我正在尝试将文件附加到通知邮件中的管道。 我怎样才能做到这一点?一个例子会很好。 问题答案: email-ext使用Ant文件语法 例如用法: