Jquery JIRA Rest API调用返回“;请求被拒绝,因为未找到多部分边界";关于通过ajax调用发布附件
我通过一个ajax调用将附件发布到JIRA rest api,但由于“没有找到多部分边界,请求被拒绝”而失败。我遵循了jira doc上提供的说明,但仍然面临这个问题。以下是截取的代码:Jquery JIRA Rest API调用返回“;请求被拒绝,因为未找到多部分边界";关于通过ajax调用发布附件,jquery,ajax,html5-canvas,jira-rest-api,Jquery,Ajax,Html5 Canvas,Jira Rest Api,我通过一个ajax调用将附件发布到JIRA rest api,但由于“没有找到多部分边界,请求被拒绝”而失败。我遵循了jira doc上提供的说明,但仍然面临这个问题。以下是截取的代码: var imageDataUrl = canvas.toDataURL(); $.ajax({ url: "https://example.atlassian.com/rest/api/2/issue/" + issueKeyid + "/attachments", type: 'POST', data:
var imageDataUrl = canvas.toDataURL();
$.ajax({
url: "https://example.atlassian.com/rest/api/2/issue/" + issueKeyid + "/attachments",
type: 'POST',
data: {
file: imageDataUrl
},
processData: false,
contentType: 'multipart/form-data',
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "Basic " + btoa(username + ":" + password));
xhr.setRequestHeader("X-Atlassian-Token","no-check");
},
success: function(data) {
alert("issue created");
},
error: function(data) {
console.log(data);
}
});
这里,imageDataUrl是从html画布方法asDataUrl(画布)获得的。
我试过卷发,一切都很好
代码出了什么问题。还有什么我必须考虑的吗? 很抱歉回复晚了 您可能需要更改分配[$.ajax]方法的方式。您可以传递希望上载的整个附件文件,而不是传递一个Base64URL图像,该文件也可以从服务器端(例如PHP)获得,您可以使用[curl]在其中发布附件 假设您已将[file input]放置在[form]DOM元素中
<form id="frm-upload" name="frm_upload" enctype="multipart/form-data">
<input type="text" name="input_text" />
<input type="file" name="input_upload_file" />
</form>
<a class="upload"> Upload </a>
然后您可以在PHP中获取上传的文件:
protected function upload()
{
var_dump($_FILES); exit;
}
您可以从中获得以下结果:
array(1) {
["input_upload_file"]=>
array(5) {
["name"]=>
string(12) "service6.png"
["type"]=>
string(9) "image/png"
["tmp_name"]=>
string(14) "/tmp/php0bYNIY"
["error"]=>
int(0)
["size"]=>
int(1169)
}
}
您可以使用[curl]来执行以下操作:
curl -D- -u admin:admin -X POST -H "X-Atlassian-Token: no-check" -F "file=@service6.png" http://example.atlassian.com/rest/api/2/issue/TEST-123/attachments
如Jira的附件后API所述:
{IssueWorkey}/附件
希望这对你的情况有所帮助。经过几次打嗝之后,我找到了向jira发布附件的方法。在将base64映像直接传递给jira之前,需要做一些事情。 这是我的代码的最终版本
var blob = BG.dataURItoBlob(items.screenshotImg);
var fd = new FormData();
fd.append("file", blob);
fd.append('comment', "img");
fd.append('minorEdit', "true");
$.ajax({
url: "https://"+jiraUrl+"/rest/api/2/issue/"+issueKeyid+"/attachments",
type: 'POST',
data: fd,
processData: false,
contentType: false,
headers: {
"X-Atlassian-Token": "nocheck"
},
success: function(data) {
status = "success";
console("success");
},
error:function(data){
status = "failed";
console("Something went wrong !!");
}
});
在这里,我首先将base64图像url转换为blob数据,然后将其作为一个FormData对象整体发送到服务器
//base64 to blob data
function dataURItoBlob(dataURI) {
// convert base64/URLEncoded data component to raw binary data held in a string
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
byteString = atob(dataURI.split(',')[1]);
else
byteString = unescape(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to a typed array
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
},
//base64到blob数据
函数dataURItoBlob(dataURI){
//将base64/URLEncoded数据组件转换为字符串中的原始二进制数据
var-byteString;
if(dataURI.split(',')[0].indexOf('base64')>=0)
byteString=atob(dataURI.split(',)[1]);
其他的
byteString=unescape(dataURI.split(',)[1]);
//分离出mime组件
var mimeString=dataURI.split(',')[0]。split(':')[1]。split(';')[0];
//将字符串的字节写入类型化数组
var ia=新的Uint8Array(byteString.length);
for(var i=0;i
您在[error]回调中收到了什么错误消息?请求被拒绝,因为未找到多部分边界。我无法找到将此imageDataURL传输到jira的完美方法。将这些图像数据作为附件发送给jira的最佳方式是什么?好的,我们会解决这个问题。我会找到另一种方法转移jira的附件。@eeya谢谢!那会很有帮助的。我真的很感谢你的努力eeya。我真的很感激。因为我在这里没有使用任何服务器端。这完全是按照客户端的要求完成的。我用另一种方式解决了这个问题。请看我的答案。
//base64 to blob data
function dataURItoBlob(dataURI) {
// convert base64/URLEncoded data component to raw binary data held in a string
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
byteString = atob(dataURI.split(',')[1]);
else
byteString = unescape(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to a typed array
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
},