如何在没有本地存储的情况下通过 PHP 将文件从 HTML 表单上传到 S3?
How do I send a file upload from an HTML form to S3 via PHP without local storage?
我正在尝试将网站转换为使用 S3 存储而不是本地(昂贵的)磁盘存储。我使用 S3Client 上的流包装器接口解决了下载问题。上传问题比较难。
在我看来,当我 post 到 PHP 端点时,$_FILES 对象已经填充并复制到 /tmp/ 我什至可以拦截它!
最重要的是,S3Client->upload() 需要磁盘上已经有一个文件!
这似乎是对我正在尝试做的事情的双重打击,而且我发现的大多数建议都使用 NodeJS 或 Java 流,所以我不知道如何翻译。
如果我可以拦截填充 $_FILES 的代码然后使用 S3\ObjectUploader 从内存发送 5MB 块会更好,但是如何破解 PHP 多部分处理程序?
想法?
编辑:文件数量非常少,每天 0-20 个,大部分为 1-5MB,有时达到 40~70MB。定期(每隔几周一次)将上传 1-2GB 的文件。因此,希望离开 EC2 实例并进入 heroku/beanstalk 类型的 PaaS,在那里我不会有太多 /tmp/ space.
在不知道应用程序的性能要求和访问它所需的用户量的情况下,很难对您的具体情况发表评论,因此我会假设基本的 Web 应用程序上传个人资料头像来尝试回答。
这有一些很好的理由,文件被流式传输到磁盘用于多种目的,其中之一是节省内存使用。如果你的文件不在磁盘上而不是在内存中(认为磁盘使用很昂贵?提高你的内存使用量,看看它有多昂贵),这对于上传小文件的单个用户来说很好,但对于一群用户上传小文件或更糟:大文件。如果您在这些库上使用默认值并让它们流入和流出磁盘,您可能会看到最佳性能。
但我还是不知道您的用例,您实际上可能出于某种未知原因不惜一切代价避免使用磁盘。
我正在尝试将网站转换为使用 S3 存储而不是本地(昂贵的)磁盘存储。我使用 S3Client 上的流包装器接口解决了下载问题。上传问题比较难。
在我看来,当我 post 到 PHP 端点时,$_FILES 对象已经填充并复制到 /tmp/ 我什至可以拦截它!
最重要的是,S3Client->upload() 需要磁盘上已经有一个文件!
这似乎是对我正在尝试做的事情的双重打击,而且我发现的大多数建议都使用 NodeJS 或 Java 流,所以我不知道如何翻译。
如果我可以拦截填充 $_FILES 的代码然后使用 S3\ObjectUploader 从内存发送 5MB 块会更好,但是如何破解 PHP 多部分处理程序?
想法?
编辑:文件数量非常少,每天 0-20 个,大部分为 1-5MB,有时达到 40~70MB。定期(每隔几周一次)将上传 1-2GB 的文件。因此,希望离开 EC2 实例并进入 heroku/beanstalk 类型的 PaaS,在那里我不会有太多 /tmp/ space.
在不知道应用程序的性能要求和访问它所需的用户量的情况下,很难对您的具体情况发表评论,因此我会假设基本的 Web 应用程序上传个人资料头像来尝试回答。
这有一些很好的理由,文件被流式传输到磁盘用于多种目的,其中之一是节省内存使用。如果你的文件不在磁盘上而不是在内存中(认为磁盘使用很昂贵?提高你的内存使用量,看看它有多昂贵),这对于上传小文件的单个用户来说很好,但对于一群用户上传小文件或更糟:大文件。如果您在这些库上使用默认值并让它们流入和流出磁盘,您可能会看到最佳性能。
但我还是不知道您的用例,您实际上可能出于某种未知原因不惜一切代价避免使用磁盘。