我正在尝试使用最新的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检查失败后抛出了404。
我在谷歌上搜索答案,但没有成功。有人能猜出我做错了什么吗?
@Nuno Neto,我很惊讶你的方法能工作,因为它在文件体中缺少一些关键元素。Confluence API是否可能更新?最重要的是文件注释和编码。事实上,你的例子会抛出一个500,但对于通过谷歌来到这里的新用户来说,下面的代码实际上是可行的。
这里的主要区别是:
FileBody fileBody = new FileBody(fileToUpload, fileComment, "application/octet-stream", "UTF-8");
我还为空文件注释添加了一点逻辑。
/**************************************************************************************************
/**
* Confluence integration. This allows the user to attach captured images to confluence pages.
*
/**************************************************************************************************/
/**
*
* @param pageID {int} Page ID of the Confluence page to add to. Navigate to Confluence page, hit 'e', copy the ID from the URI.
* @param {String} path
* @param {String} user Your Confluence username.
* @param {String} pass Your Confluence password.
* @param {String} baseURL Your Confluence url.
* @return {boolean}
*/
public boolean addAttachmentToPage(int pageID, String path, String user, String pass, String baseURL, String fileComment){
String auth = new String(org.apache.commons.codec.binary.Base64.encodeBase64((user+":"+pass).getBytes()));
if ( fileComment.equals("") | fileComment.equals(" ") | fileComment.equals(null)){
fileComment = user + "-" + path;
};
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost( baseURL + "/rest/api/content/" + pageID + "/child/attachment" );
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, fileComment, "application/octet-stream", "UTF-8");
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();
// Success!
if(response.getStatusLine().getStatusCode() == 200) {
System.out.println("Confluence -> Exported to the page with ID: " + confPageID);
return true;
}
else {
System.out.println("Confluence -> Error : " + response.getStatusLine().getStatusCode());
System.out.println(response + "\n" + "\n" + response.getAllHeaders() + "\n" + result + "\n" + path + "\n" + "Attempted against: " + baseURL + "/rest/api/content/" + pageID + "/child/attachment" + "\n");
return false;
}
};
我已经设法通过使用apache超文本传输协议客户端解决了这个问题。对于可能有相同问题的客户端,代码如下:
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检查失败。 我已经在Goog
我正在使用贝宝RESTAPI进行支付交易。我正在调用上下文(/v1/payments/payment)进行授权,并将ItemList作为事务对象的一部分传递。 要求:在Paypal验证页面上显示折扣/礼品卡金额作为项目列表的一部分。 问题:API不允许将负数添加到项,并引发验证错误。 有人能告诉我是否可以显示折扣/礼品卡的负数。(但在经典API中也是可能的)
我使用jira api添加附件的问题 据留档说,我设置了一些东西。 > 包含附件的多部分/表单数据参数的名称必须为“file”。 资源需要一个多部门员额。 我的代码如下 请指出我犯了什么错误
我正在尝试使用新的嵌入式可视化功能。我有一个iframe,它指向graphdb服务器,url如下: http://localhost:7200/graphs-视觉化?uri=[…] 这很好,但只适用于默认或以前选择的存储库。我无法找到一种方法来选择存储库,而不必手动转到http://localhost:7200/ 似乎存储库选择存储在一个cookie中,并且HTTP头可用,但似乎没有任何东西可以用
问题内容: 我正在运行一个基于Java Spring MVC的Web应用程序。它还基于Hybris平台。 现在,已经实现了有关身份验证和授权的基本功能。意味着我们确实有用于会话,有效的用户系统等的过滤器。 但是,我们目前还没有针对诸如XSS和其他可能的攻击之类的安全措施。XSS可能是最大的问题,因为它是最常见的攻击方式。 现在,我不知道……明智地采取什么步骤?我环顾四周,我发现存在像XSS-Fil
有一个用户集合