问题描述
当前,我有一个使用Postgresql数据库在Heroku上运行的PHP应用程序。我希望我的用户能够将图像上传到我的保管箱上的文件夹,并在数据库中存储其他信息(在这种情况下,产品信息,例如价格,标题,重量,图像在保管箱上的位置)。>
现在,我正在HTML表单内使用文件输入来通过将整个表单发布到服务器(包括图像)来提交图像,然后使用cURL将图像发送到保管箱并等待回应成功。成功后,我将创建数据库记录,其中包含我之前提到的其他信息。
这对于小文件效果很好,但是Heroku的超时时间为30秒,我无法更改。对于大文件,整个文件上传到服务器,然后上传到保管箱。这两个上传操作非常耗时,并且花费的时间超过了超时时间。
我本来是想使用javascript(特别是jQuery ajax命令)将文件发送到保管箱,以便由客户端处理,然后在成功发布到服务器后发布,但是我担心自从我以来这种安全性客户端可以查看的源代码中需要有我自己的授权令牌。
PHP是否有任何方法可以将文件从客户端发送到外部URL,而无需接触服务器?如何安全地做到这一点?
解决方法
这听起来很适合the Dropbox API /2/files/get_temporary_upload_link endpoint。
您可以在服务器上调用该链接以检索临时上传链接,然后将该链接向下传递给浏览器。然后,您可以让一些JavaScript代码使用该链接直接从浏览器执行上传。
由于只有/ 2 / files / get_temporary_upload_link端点调用需要您的Dropbox访问令牌(而临时上传链接本身不需要),因此您可以仅在服务器上对访问令牌保密,而不必将其公开给客户端。并且由于直接从浏览器上传到Dropbox服务器,因此您不必通过自己的服务器传递文件数据,从而避免了超时问题。