如何使用 openproject API 获取附件数据

How to get an attachment's data with the openproject API

我目前正在尝试使用 openproject api v3 在我的网站上显示有关 openproject 工作包的数据(我正在使用 PHP 和 symfony。)。

我获取一般数据(主题、描述、优先级等)没有问题,但我不确定我是否知道如何向用户显示附件。

我尝试使用 "/api/v3/work_packages/".$id."/attachments",但 json 中没有图像 returned:

"_type":"Collection",
"total":1,
"count":1,
"_embedded":{
    "elements":[{
        "_type":"Attachment",
        "id":1888,"fileName":"128-128-logo.png",
        "fileSize":9583,
        "description":{"format":"plain","raw":null,"html":""},
        "contentType":"image/png",
        "digest":{"algorithm":"md5","hash":"/*-hash-here-*/"},
        "createdAt":"2018-07-09T16:49:26Z",
        "_links":{
             "self":{"href":"/api/v3/attachments/1888","title":"128-128-logo.png"},
             "author":{"href":"/api/v3/users/7","title":"User Name"},
             "container":{"href":"/api/v3/work_packages/1697","title":"Subject -\u003E Test Query OpenProject"},
             "downloadLocation":{"href":"/attachments/1888/128-128-logo.png"},
             "delete":{"href":"/api/v3/attachments/1888","method":"delete"}
        }
    }]
},
"_links":{
    "self":{"href":"/api/v3/work_packages/1697/attachments"}
}

我也试过直接 link 到附件,但是

"_type":"Attachment",
"id":1888,
"fileName":"128-128-logo.png",
"fileSize":9583,
"description":{"format":"plain","raw":null,"html":""},
"contentType":"image/png",
"digest":{"algorithm":"md5","hash":"/*-hash-here-*/"},
"createdAt":"2018-07-09T16:49:26Z",
"_links":{
    "self":{"href":"/api/v3/attachments/1888","title":"128-128-logo.png"},
    "author":{"href":"/api/v3/users/7","title":"User Name"},
    "container":{"href":"/api/v3/work_packages/1697","title":"Subject -\u003E Test Query OpenProject"},
    "downloadLocation":{"href":"/attachments/1888/128-128-logo.png"},
    "delete":{"href":"/api/v3/attachments/1888","method":"delete"}
}

下载位置不是 API url 和 return 406 - 如果我尝试使用 img 标签 ( <img src="https://XXXXXX.openproject.com/attachments/1888/128-128-logo.png"> ) 访问它,则未经授权

所以我想我的问题是:即使我的用户在我的开放项目上没有帐户,我如何向他们显示附件?

要在您的网站上显示附件,您必须:

  • 授予对您的开放项目实例的匿名访问权限。
  • 将附件放在 public 项目中,这意味着它必须附加到 public 项目的工作包、wiki 页面...

授予对您的开放项目实例的匿名访问权限

取消选中系统设置中的"Authentication required" ("Administration" -> "System settings" -> "Authentication" (Tab)") 并保存。

转项目public

在项目设置中检查 "Public"(导航到项目后 -> "Project settings" -> "Information"(Tab))并保存。

您的网站只能访问当前 public 项目资源的附件。

后果

每个人都可以访问您的 OpenProject 实例,至少是 public 项目的部分。

选项 1

如果它是一个私人网站,并且该网站的所有访问者也将在 OpenProject 实例上拥有一个帐户,并且如果可以保证,他们在访问该网站时将始终登录到 OpenProject,他们的浏览器将发送在获取图像时自动将会话 cookie 发送到 OpenProject 实例,这将导致他们被授权获取附件。

备选方案 2

OP 8.0 发布后,API 客户端将能够下载附件。然后带有 API 键的脚本可以下载感兴趣的附件并将它们存储在您的网站可以访问的位置。然后网站访问者将直接从网站获取附件。