附加到项目的Podio文件无法下载

时间:2016-06-30 17:51:39

标签: node.js podio

我在尝试下载附加到Podio项目的文件时遇到问题:

podio.request('get', '/file/{file_id}/raw').then(console.log);

以上程序显示:

{}

这是一个JSON字符串化的空对象(而不是原始文件内容)。

详细说明:

  • 登录
  • 时,可以使用其URL访问上述文件
  • 上述代码在正确认证后运行
  • 当使用项目的图像字段中的file_id时,它实际上有效,但不是来自文件附件(在我的情况下是pdf文件)。
  • 使用API​​端点/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' }

2 个答案:

答案 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.