2012-06-06 74 views
0

我们都很清楚JIRA REST API的请求和响应格式是JSON格式。我使用类型http://example.com:8080/jira/rest/api/2/attachment的url成功检索了上传文件的附件详细信息。通过REST API在JIRA中上传文件

我现在需要使用相同的REST API将文件上传到JIRA。我拥有一个java客户端,并且我需要使用MultiPartEntity发布多部分输入。我不知道如何提交带有JSON请求的X-Atlassian-Token: nocheck标题。搜索文件我只有基于curl的请求示例。任何人都可以帮我修复这个问题

+1

可能重复[如何发送Java中的HTTP标头(http://stackoverflow.com/questions/819474/how- to-send-an-http-header-in-java) –

+0

我会从https://studio.atlassian.com/svn/JRJC/trunk/atlassian-jira-rest-java-client/src/test/开始java/it/JerseyIssueRestClientTest.java其中有一个testAddAttachment方法 – mdoar

+0

谢谢Mdoar。但是如何发布MultipartEntity还是没有任何提示。 –

回答

1

我已经做到了这种方式,它的工作原理:

public static void main(String[] args) throws Exception { 
    File f = new File(args[ 0 ]); 
    String fileName = f.getName(); 
    String url = "https://[JIRA-SERVER]/rest/api/2/issue/[JIRA-KEY]/attachments"; 

    CloseableHttpClient httpClient = HttpClients.createDefault(); 
    HttpPost post = new HttpPost(url); 
    post.setHeader("Authorization", basicAuthHeader("username", "password")); 
    post.setHeader("X-Atlassian-Token", "nocheck"); 
    HttpEntity reqEntity = MultipartEntityBuilder.create() 
      .setMode(HttpMultipartMode.BROWSER_COMPATIBLE) 
      .addBinaryBody("file", 
       new FileInputStream(f), 
       ContentType.APPLICATION_OCTET_STREAM, 
       f.getName()) 
      .build(); 
    post.setEntity(reqEntity); 
    post.setHeader(reqEntity.getContentType()); 
    CloseableHttpResponse response = httpClient.execute(post); 
} 

public static String basicAuthHeader(String user, String pass) { 
    if (user == null || pass == null) return null; 
    try { 
     byte[] bytes = (user + ":" + pass).getBytes("UTF-8"); 
     String base64 = DatatypeConverter.printBase64Binary(bytes); 
     return "Basic " + base64; 
    } 
    catch (IOException ioe) { 
     throw new RuntimeException("Stop the world, Java broken: " + ioe, ioe); 
    } 
} 
相关问题