在我使用laravel 5.1构建的Web应用程序中,用户可以上传一些敏感文件,我将这些文件存储在Amazon S3中。稍后,我希望有权限的用户可以下载此文件。由于我想要进行身份验证检查,因此我不能使用传统方法通过向他们提供S3文件的直接链接来下载文件。
我的方法:
我的方法:
- 当用户请求下载时,我的服务器会将文件下载到本地,然后流式传输给用户。问题:有时需要很长时间,因为文件太大。
- 给用户一个预签名URL以直接从S3下载。 URL仅在5分钟内有效。问题:如果该URL被共享,则任何人都可以在5分钟内下载它。
- 根据此文章,直接从S3向客户端流式传输数据。这看起来很有前途,但我不知道如何实现这一点。
- 注册流包装器 - 这是我的第一个问题,因为我不知道如何获取
S3Client
对象,因为laravel使用flysystem,并且我不知道调用哪些方法才能获取此对象。也许我需要在composer.json中单独包含S3包? - 禁用输出缓冲 - 我需要在laravel中执行此操作还是laravel已经处理好了?
Response::download($pathToFile, $name, $headers)
直接从S3流式传输到客户端,则我很乐意听取您的方法。
"IpAddress":{"AWS:SourceIp":"optional IP address"}
- 这将为您的方案增加一些额外的安全性。 - ceejayoz