融合接口
分片上传步骤较多,包括初始化、文件切片、各个分片上传、完成上传。为了简化分片上传,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用于标识文件的资源类型,比如image/png
, image/jpg
是图片类型,video/mpeg
, video/mp4
是视频类型,text/plain
, text/html
是文本类型, 浏览器针对不同的Content-Type会有不同的操作,比如图片类型可以预览,视频类型可以播放,文本类型可以直接打开。application/octet-stream
类型会直接打开下载窗口。
有些用户反馈图片和视频无法预览的问题,主要就是Content-Type没有正确设置导致的;Content-Type参数需要用户主动设置,默认是application/octet-stream
。在php sdk中,可以根据对象key值后缀扩展名来决定文件的Content-Type,参考PHP SDK Demo 中mime.php。