我在尝试下载附加到Podio项目的文件时遇到问题:
podio.request('get', '/file/{file_id}/raw').then(console.log);
以上程序显示:
{}
这是一个JSON字符串化的空对象(而不是原始文件内容)。
详细说明:
file_id
时,它实际上有效,但不是来自文件附件(在我的情况下是pdf文件)。/item/app/{app_id}/filter
获取项目列表时,设置属性file_count
,但不设置files
。我必须单独请求/item/{item_id}
以获取响应中包含的files
属性,不确定原因。问题:您知道这是什么问题,以及如何下载原始附件?
编辑:aditionnal信息
如果我使用以下命令请求单个文件元数据:
podio.request('get', '/file/1234').then(console.log);
我得到一个包含许多字段的文件JSON对象,但不文件内容:
{
...
link: 'https://files.podio.com/1234',
file_id: 1234,
...
}
正如我对@stengaard的评论所述,如果我尝试为上述链接请求API,请回复:
{ [PodioNotFoundError: [object Object]]
message:
{ error_parameters: {},
error_detail: null,
error_propagate: false,
request:
{ url: 'http://api.podio.com/1234',
query_string: '',
method: 'GET' },
error_description: 'No matching operation could be found. The path \'/1234\' was not found..',
error: 'not_found' },
status: 404,
url: 'https://api.podio.com:443/1234',
name: 'PodioNotFoundError' }
答案 0 :(得分:5)
要使用GET /file/{file_id}/raw
端点,您需要具有提升的信任级别的API密钥。
而是使用GET /file/{file_id}
端点。它包含您应该遵循的link
属性(URL)以获取文件内容。
link
属性如下所示:https://files.podio.com/{file_id}
。要获取文件,请执行https://files.podio.com/{file_id}?oauth_token={oauth_token}
。 OAuth令牌与用于GET /file/{file_id}
的令牌相同。如果您知道文件ID(例如,来自GET /item/{item_id}
,则可以跳过GET /file/{file_id}
并直接与files.podio.com
联系。(注意:您还可以在HTTP中设置Authorization: OAuth2 {oauth_token}
标头请求,如果您不想在URL参数中传递身份验证令牌。)
有关如何使用它的示例,请参阅https://github.com/podio/podio-js/blob/master/lib/general.js#L11
通常在JS客户端中,如果您使用podio
作为Podio API对象,OAuth令牌将位于那里:
podio.authObject.accessToken
所以要在nodejs中获取文件的原始内容:
var url = 'https://files.podio.com/'+file_id+'?oauth_token='+podio.authObject.accessToken;
request(url, function (err, fileContent) {
// use fileContent here, write to a file, etc...
});
答案 1 :(得分:0)
It seems your request has an error. please try the below method and get raw file content from its response.
podio.request('get', '/file/{file_id}').then(console.log);
FYI, we couldn't get the files by filtering the items. we need to request /item/{item_id}
individually to get the files property as you said.