eddturtle/direct-upload

Composer包,用于构建AWS签名,以便直接上传到S3

v3.0.0 2020-11-29 09:07 UTC

README

Build Status Latest Stable Version Total Downloads License Scrutinizer Code Quality

此包旨在构建必要的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_IDAWS_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文件中查看完整的许可协议。