【问题标题】:Podio file attached to item cannot be downloaded无法下载附加到项目的 Podio 文件
【发布时间】:2016-06-30 17:51:38
【问题描述】:

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

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

以上程序显示:

{}

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

详情:

  • 以上文件登录后可以通过其网址访问
  • 上面的代码是在正确的身份验证后运行的
  • 当使用来自项目的图像字段的file_id 时,它实际上可以工作,但不能来自文件附件(在我的情况下为 pdf 文件)。
  • 使用 API 端点 /item/app/{app_id}/filter 获取项目列表时,设置了属性 file_count,但未设置 files。我必须单独请求/item/{item_id} 才能获得响应中包含的files 属性,但不知道为什么。

问题:您知道问题出在哪里,以及如何下载原始附件?

编辑:附加信息

如果我使用以下命令请求单个文件元数据:

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' }

【问题讨论】:

    标签: node.js podio


    【解决方案1】:

    要使用 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...
    });
    

    【讨论】:

    • 这不起作用:链接不能被程序调用,它需要人工交互进行身份验证。我需要一种以编程方式下载文件的方法,因此需要使用 API。正如我的问题中所述,/file/{fileId}/raw 适用于图像字段 - 这也是文件 - 但不是附加到项目的文件。
    • 在通过 API 请求 link 时查看我关于 JSON 答案的更新答案
    • 抱歉 - 您需要提供 oauth_token 作为参数。我会更新我的答案。
    • 感谢您的详细信息,它有效!当使用podio 作为podio API 对象时,OAuth 令牌位于:podio.authObject.accessToken
    【解决方案2】:

    您的请求似乎有误。 请尝试以下方法并从其响应中获取原始文件内容。

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

    仅供参考,我们无法通过过滤项目来获取文件。如您所说,我们需要单独请求/item/{item_id} 以获取文件属性。

    【讨论】:

    • 嗨@Mûhámmàd,感谢您的回答。这没用。我已经更新了我的答案以说明原因。 (您提出的请求获取文件元数据,而不是实际文件内容)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多