我正在使用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时使用文件名吗?
答案 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。您可以看到name
与url
相同,但此处没有mimeType
。它在the documentation中找不到。您以哪种方式获取卡片数据?“如果您使用JavaScript,上面的代码可能对您有帮助。
至于网址的定制,我什么都不知道,我想这是不可能的。
答案 1 :(得分:0)
{file:file_contents,' BuildSheet.html':filename,mimeType:' text / html' }
您是否尝试过使用密钥name
? reference
答案 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)
}