融合接口

分片上传步骤较多,包括初始化、文件切片、各个分片上传、完成上传。为了简化分片上传,PHP SDK 提供了对分片上传方式的封装。您可以调用 Aws\S3\MultipartUploader 接口,快速进行文件的上传。在使用这些封装接口的同时,您同样可以配置一些参数,控制分片的大小、并发数。以下代码展示如何通过 MultipartUploader 进行分片上传:

public function MultiPartUpload()
{
    $file_Path = 'E:/ExampleObject.txt';
    $objectName = "ExampleObject.txt";

    $uploader = new Aws\S3\MultipartUploader($this->s3Client, $file_Path, [
        'bucket' => $this->bucket,
        'key'    => $objectName,
        'concurrency' => 5,         // 设置上传分片 UploadPart 操作的最大并行数量,默认为5.
        'part_size' => 5242880,     // 设置分片大小,默认为5M.
        'acl' => 'public-read',     // 设置ACL,参考值private | public-read
        'before_initiate' => function(\Aws\Command $command)
        {
            $command['ContentType'] = 'text/json';      // 设置content-type
        },
    ]);

    try {
        $result = $uploader->upload();
        echo "Upload complete: {$result['ObjectURL']}" . "\n";
    } catch (\Aws\Exception\MultipartUploadException $e) {
        echo $e->getMessage() . "\n";
    }
}
参数 类型 说明
bucket string 桶名
key string 对象名
acl string private,public-read,public-read-write
concurrency int 并发数
part_size int 分片大小,默认5MB
before_initiate 函数 用于设置content-type

关于Content-Type的配置

Content-Type用于标识文件的资源类型,比如image/pngimage/jpg 是图片类型,video/mpegvideo/mp4是视频类型,text/plaintext/html是文本类型, 浏览器针对不同的Content-Type会有不同的操作,比如图片类型可以预览,视频类型可以播放,文本类型可以直接打开。application/octet-stream类型会直接打开下载窗口。

有些用户反馈图片和视频无法预览的问题,主要就是Content-Type没有正确设置导致的;Content-Type参数需要用户主动设置,默认是application/octet-stream。在php sdk中,可以根据对象key值后缀扩展名来决定文件的Content-Type,参考PHP SDK Demo 中mime.php。