通过REST API将附件添加到Jira

我正在尝试使用最新的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 的全部内容, 来源链接: utcz.com/qa/419579.html

回到顶部