是否可以使用 PHP 将文件上传到 Dropbox 而无需先将其存储在我的服务器上?

Is it possible to upload a file to Dropbox without storing it on my server first using PHP?

目前,我在 Heroku 上有一个 PHP 应用 运行,使用的是 Postgresql 数据库。我希望我的用户能够将图像上传到我的 dropbox 上的文件夹,并在我的数据库中存储其他信息(在本例中,产品信息,例如价格、标题、重量、图像在 dropbox 上的位置)。

现在,我在 HTML 表单中使用文件输入通过将整个表单(包括图像)发布到我的服务器来提交图像,然后我使用 cURL 将图片发送到dropbox,等待响应成功。成功后,我创建了我的数据库记录,其中包含我之前提到的其他信息。

这适用于小文件,但 Heroku 有 30 秒的超时时间,我无法更改。对于大文件,整个文件上传到服务器,然后再上传到 dropbox。这两个上传操作是 time-intensive 并且花费的时间超过了超时允许的时间。

我想使用 javascript(特别是 jQuery ajax 命令)将文件发送到保管箱,以便它由客户端处理,然后发布到我的服务器成功,但我担心它的安全性,因为我需要在客户端可以查看的源代码中拥有我自己的授权令牌。

有什么方法可以让 PHP 将文件从客户端发送到外部 URL 而无需接触服务器?我如何安全地执行此操作?

这听起来很适合 the Dropbox API /2/files/get_temporary_upload_link endpoint

您可以在服务器上调用它来检索临时上传 link,然后将 link 传递给浏览器。然后,您可以让一些 JavaScript 代码使用 link.

直接从浏览器执行上传

因为只有 /2/files/get_temporary_upload_link 端点调用需要您的 Dropbox 访问令牌(而临时上传 link 本身不需要),您可以只在服务器上保密您的访问令牌, 而不会将其暴露给客户端。由于直接从浏览器上传到 Dropbox 服务器,您不必通过自己的服务器传递文件数据,避免了超时问题。