eddturtle / direct-upload
Composer包,用于构建AWS签名,以便直接上传到S3
v3.0.0
2020-11-29 09:07 UTC
Requires
- php: >=7.2
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^8.0||^9.0
README
此包旨在构建必要的AWS签名(v4)、策略和表单输入,以便直接将文件发送到亚马逊的S3服务。这在从云平台上传时特别有用,有助于构建《十二因素应用》。
该项目源于这篇博客文章,可能有助于解释代码的工作原理以及如何设置它。该博客文章还有很多有用的评论,如果您遇到问题可能有所帮助。
支持PHP 7.2+(如果需要php 5.5+,请使用v1.*)
安装
可以通过运行以下命令使用Composer安装此包:
composer require eddturtle/direct-upload
用法
安装完包后,我们可以创建上传对象,如下所示:(请记住添加您的S3详细信息)
选项1:指定AWS凭证
<?php use EddTurtle\DirectUpload\Signature; // Require Composer's autoloader require_once __DIR__ . "/vendor/autoload.php"; $uploader = new Signature( "YOUR_S3_KEY", "YOUR_S3_SECRET", "YOUR_S3_BUCKET", "eu-west-1" );
或 选项2:使用环境变量(AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
)
<?php use EddTurtle\DirectUpload\SignatureAuto; // Require Composer's autoloader require_once __DIR__ . "/vendor/autoload.php"; $uploader = new SignatureAuto("YOUR_S3_BUCKET", "eu-west-1");
有关查找您所在的地区的更多信息,请访问 http://amzn.to/1FtPG6r
然后,使用我们刚刚创建的对象,我们可以生成表单的URL和所有需要的隐藏输入。
<form action="<?php echo $uploader->getFormUrl(); ?>" method="POST" enctype="multipart/form-data"> <?php echo $uploader->getFormInputsAsHtml(); ?> <input type="file" name="file"> </form>
示例
我们有一个示例项目,包括JavaScript,以演示整个流程的工作原理。
S3 CORS配置
通过浏览器将文件上传到S3时,确保存储桶具有接受来自其他位置的文件的CORS配置非常重要。以下是一个示例CORS配置
<?xml version="1.0" encoding="UTF-8"?> <CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <CORSRule> <AllowedOrigin>*</AllowedOrigin> <AllowedMethod>GET</AllowedMethod> <AllowedMethod>POST</AllowedMethod> <AllowedMethod>PUT</AllowedMethod> <MaxAgeSeconds>3000</MaxAgeSeconds> <AllowedHeader>*</AllowedHeader> </CORSRule> </CORSConfiguration>
选项
可以将选项作为第五个参数传递给Signature类,以下是可能被覆盖的选项列表。
例如
$uploader = new SignatureAuto("", "", [ 'acl' => 'public-read', 'max_file_size' => 10, 'encryption' => true, 'additional_inputs' => [ 'Content-Disposition' => 'attachment' ] ]);
可用的签名方法
贡献
欢迎通过拉取请求进行贡献。该项目使用PSR 1+2编码标准构建,如果提交任何代码,它应遵循此标准,并附带任何适用的测试(更改/添加的代码)。尽可能保持每个拉取请求为一个特性。
运行测试就像运行
vendor/bin/phpunit
许可
此项目受MIT许可协议保护,您可以在本存储库的LICENCE文件中查看完整的许可协议。