通过API上传附件时,Trello附件提供错误的内容类型

时间:2017-02-15 18:18:02

标签: trello

我正在使用Trello API将文件上传(并附加)到卡片中。

我向https://api.trello.com/1/cards/my-card-id/attachments

发帖

邮件正文是JSON

{ file: file_contents, 'BuildSheet.html': filename, mimeType: 'text/html' }

file_contents is a string that contains the body of the file I want to attach.

有效。文件上传并附加。当我获取卡片数据时,这就是我对此附件的看法。

{"id":"58a496bc751c0c2fa260630f",
 "bytes":3291,
 "date":"2017-0215T17:58:20.881Z",
 "edgeColor":null, 
 "idMember":"55240806b8ca85db897253c4",
 "isUpload":true,
 "mimeType":"text/html",
 "name":"BuildSheet.html",
 "previews":[],
 "url":"https://trello-attachments.s3.amazonaws.com/589ca323806c1d80cc03ea12/589ceda619d5936e8428f15b/1f62074b6700e61e611a90beaa8c2c73/Upload"}

您可以看到mimeType已正确设置。名字也是对的。但是,如果您从UI内部上传,则网址不会像使用文件名一样使用。因此该文件没有.html扩展名。

下载文件时,它包含此标题

Content-Type: application/octet-stream

应该是text / html。这会导致浏览器下载文件而不是显示它。

我做错了吗?还有其他人有这个问题吗?

另外有一种方法可以让Trello在构造url时使用文件名吗?

3 个答案:

答案 0 :(得分:0)

当我将文件或网址附加到Trello卡时,我只使用url的POST,就像这样(JavaScript):

var id = 'something';
var attach = 'https://www.cs.tut.fi/~jkorpela/forms/file.html';

var payload = {"url": attach};
var blob = new Blob([JSON.stringify(payload)], {type: 'application/json'});
var url = 'https://api.trello.com/1/cards/'+id+'/attachments?key='+API_KEY+'&token='+TOKEN;

var xhttp = new XMLHttpRequest();   
xhttp.open("POST", url, true);
xhttp.send(blob);

在此之后,当我获得卡片的JSON时,它就像这样:

{"id":"xxx...", ... 
 "actions":[{
   "id":"yyy...",
   "idMemberCreator":"...",
   "data":{
     "board":{ ...
     "attachment":{
       "url":"https://www.cs.tut.fi/~jkorpela/forms/file.html",
       "name":"https://www.cs.tut.fi/~jkorpela/forms/file.html",
       "id":"zzz..."}}, ...

您可以通过在网址末尾添加.json来获取卡片的JSON。您可以看到nameurl相同,但此处没有mimeType。它在the documentation中找不到。您以哪种方式获取卡片数据?“如果您使用JavaScript,上面的代码可能对您有帮助。

至于网址的定制,我什么都不知道,我想这是不可能的。

答案 1 :(得分:0)

  

{file:file_contents,' BuildSheet.html':filename,mimeType:' text / html' }

您是否尝试过使用密钥namereference

答案 2 :(得分:0)

Trello API似乎忽略了mimeType参数,而是在响应正文中使用了Content-Disposition参数。

类似以下作品的尸体:

------WebKitFormBoundarydjg0lJJiuTZmCppw
Content-Disposition: form-data; name="file"; filename="image.png"
Content-Type: image/png

以下是使用节点请求库的相应代码:

async function attachFileToTrelloCard(id: string, file: Buffer, fileName: string, mimeType: string) {
  const options = {
    method: 'POST',
    url: `https://api.trello.com/1/cards/${id}/attachments`,
    formData: {
      file: {
        value: file,
        options: {
          filename: fileName,
          contentType: mimeType
        }
      },
      token: process.env.TRELLO_API_TOKEN,
      key: process.env.TRELLO_API_KEY,
      name: fileName,
      mimeType
    }
  }

  return await request(options)
}