2017-04-18 125 views
0

我有一个需要将文件上传到Asana的项目。如果可能的话,我希望能够通过Asana的API来做到这一点。我已经能够使用Ajax Post请求在Asana中成功创建任务。无论如何使用Ajax Post请求将文件上传到Asana任务?我希望能够直接从HTML FileUplaod对象上传文件。有谁知道这是否可能?Asana API - 使用Ajax上传文件

我曾尝试将这样的JSON对象发布到附件API,但是这没有奏效。

https://app.asana.com/api/1.0/tasks/ {}任务id /附件

{ “父”:1337, “DOWNLOAD_URL”: “https://www.dropbox.com/s/1234567890abcdef/Screenshot.png?dl=1”, }

我也不想使用URL后,我如果可能,希望直接从FileUpload对象发布。

回答

0

简短的回答是检查这个其他堆栈溢出问题,这个问题有很好的描述如何解决这个问题。 sending a file as multipart through xmlHttpRequest

长的答案是这样的:

上传的文件有不同的“感觉”比大多数我们的API的休息,因为附件端点预计采取的Content-Type: multipart/form-data内容。有几个主要的东西,你必须得到正好适合这个工作:

  1. 你必须是内容类型请求头设置为multipart/form-data并且也该标题设置键boundary是一个独特的,最好我们使用1z2x3c4v5b作为这个例子。
  2. 你有2个破折号和边界,即--1z2x3c4v5b开始上传的身体,跟着一个换行符
  3. 仍然在上传,分隔符后,你必须提供一些“报头”指定内容处置和内容型正确的文件(即它是什么类型的图像,它的名字是,诸如此类的事情)
  4. 2换行符
  5. 原始字节的文件
  6. 2换行符
  7. 2破折号,分隔符和2个最终破折号,即--1z2x3c4v5b--

请注意,所有这些功能是怎么走到一起的例子our Attachments documentation。这首歌曲和舞蹈,必须完成恰到好处是其他SO贴子的作者所说的“XHR将关注适当的标题和请求主体编码”。您可以尝试自行解决这个问题,但我会推荐他们概述的方法,因为它是迄今为止最简单的方法。

0

我能够解决这个使用下面的代码。

function addAttachment(taskID) 
     { 
      var data = new FormData(); 
      data.append("file", document.getElementById("fileUploader").files[0]); 

      var xhr = new XMLHttpRequest(); 

      xhr.addEventListener("readystatechange", function() { 
       if (this.readyState === 4) { 
       console.log(this.responseText); 
       } 
      }); 

      xhr.open("POST", "https://app.asana.com/api/1.0/tasks/"+taskID+"/attachments"); 
      xhr.setRequestHeader("authorization", "Bearer <access-token>"); 

      xhr.send(data); 
     }