Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery JIRA Rest API调用返回“;请求被拒绝,因为未找到多部分边界";关于通过ajax调用发布附件_Jquery_Ajax_Html5 Canvas_Jira Rest Api - Fatal编程技术网

Jquery JIRA Rest API调用返回“;请求被拒绝,因为未找到多部分边界";关于通过ajax调用发布附件

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:

我通过一个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: {
  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});
},