2015-07-19 16 views
1

有關於如何通過捲曲請求,這裏將附件添加到一個問題吉拉網站的一些文檔:https://confluence.atlassian.com/display/JIRAKB/How+to+attach+an+attachment+in+a+JIRA+issue+using+REST+API如何通過的NodeJS REST請求添加一個文件附件

這是我用來成功地創建代碼問題:

var request = require("request"); 
var auth = "Basic " + new Buffer("user:password").toString("base64"); 
var options = { 
    uri: 'http://domain.com/rest/api/2/issue/', 
    headers : { 
    "Authorization" : auth 
    }, 
    method: 'POST', 
    json: { 
    "fields": { 
     "project": { 
      "id": "10000" 
     }, 
     "summary": summary, 
     "description": description, 
     "issuetype": { 
      "name": "Bug" 
     }, 
     "customfield_10003": {"value": value} 
    } 
    } 
}; 
request(options, function (error, response, body) { 
    if (!error) { 
    console.log("Success"); 
    } 
}); 

因此,爲了將附件添加到與1200的ID的票,我想我會做這樣的事情:

var options = { 
     uri: 'http://domain.com/rest/api/2/issue/1200/attachment/', 
     headers : { 
     "Authorization" : auth, 
     "X-Atlassian-Token" : nocheck 
     }, 
     method: 'POST', 
     json: { 
     "fields": { 
      "file" : "filename.txt" 
     } 
     } 
    }; 

但沒有運氣。

編輯:到某個地方。下面是我得到了什麼:

var request = require('request'); 
var fs = require("fs"); 
var auth = "Basic " + new Buffer("user:password").toString("base64"); 
var formData = { 
    file: { 
    value: fs.createReadStream('file.txt'), 
    options: { 
     filename: 'file.txt', 
     contentType: 'text/plain' 
    } 
    } 
}; 
request.post({ 
    url:'http://domain.com/rest/api/2/issue/14000/attachments/', 
    headers : { 
     "Authorization" : auth, 
    "X-Atlassian-Token" : "nocheck" 
     }, 
    formData: formData 
}, function optionalCallback(err, httpResponse, body) { 
    if (err) { 
    return console.error('upload failed:', err); 
    } 
    console.log('Upload successful! Server responded with:', body); 
}); 

它上傳了一個名爲file.txt文件,但是當我看附件它打印出的是開出這樣的堆棧跟蹤:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><status><status-code>500</status-code><stack-trace>java.lang.NullPointerException&#xD; 
    at com.atlassian.plugins.rest.common.security.jersey.XsrfResourceFilter.mediaTypeToString(XsrfResourceFilter.java:91)&#xD; 
    at com.atlassian.plugins.rest.common.security.jersey.XsrfResourceFilter.isXsrfable(XsrfResourceFilter.java:76)&#xD; 
    at com.atlassian.plugins.rest.common.security.jersey.XsrfResourceFilter.filter(XsrfResourceFilter.java:54)&#xD; 
    at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:277)&#xD; 
    at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)&#xD; 
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)&#xD; 
    at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)&#xD; 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)&#xD; 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)&#xD; 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)&#xD; 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)&#xD; 
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)&#xD; 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)&#xD; 
+0

你需要使用multipart/form-data:http://stackoverflow.com/questions/13797670/nodejs-post-request-multipart-form-data – monkey

+0

我仍然無法弄清楚爲什麼它不工作。我已經添加了多部分選項以及表單數據。 –

+0

試試這個模塊https://github.com/felixge/node-form-data – monkey

回答

0

你先試試:

var options = { 
     uri: 'http://domain.com/rest/api/2/issue/1200/attachment/', 
     headers : { 
     "Authorization" : auth, 
     "X-Atlassian-Token" : nocheck 
     }, 
     method: 'POST', 
     json: { 
     "fields": { 
      "file" : "filename.txt" 
     } 
     } 
    }; 

將不起作用,因爲它不被支持。檢查Jira attachment documentation

所以,也許你需要調整你FORMDATA對象被

var formData = { 
    file: fs.createReadStream('file.txt'), 
}; 

無需編輯元數據,如果你不需要它們。還要確保你有一個有效的文件流。

關於堆棧跟蹤,儘管添加了「X-Atlassian-Token」頭文件,但我看到與XSRF相關的堆棧幀,這對我來說沒有任何意義。

相關問題