php - 低级 API 分段文件上传过程不起作用

标签 php amazon-web-services amazon-s3

我们正在尝试通过多部分文件上传过程上传文件。通过使用下面给出的代码:

while (!feof($file)) {

$result = $s3->uploadPart(array(
    'Bucket'     => $bucket,
    'Key'        => $key,
    'UploadId'   => $uploadId,
    'PartNumber' => $partNumber,
    'Body'       => fread($file, filesize($filename))
));
$parts[] = array(
    'PartNumber' => $partNumber++,
    'ETag'       => $result['ETag'],
);
}

//4.完成分段上传。

$result = $s3->completeMultipartUpload(array(

    'Bucket'   => $bucket,
    'Key'      => $key,
    'UploadId' => $uploadId,
    'Parts'    => $parts,
));
$url = $result['Location'];

fclose($file);

通过使用此代码,文件被转换为 Multipart 但无法上传文件。它通过 print_r 显示这种类型的错误:

Guzzle\Service\Resource\Model Object
(

[structure:protected] => 
[data:protected] => Array
    (
        [ServerSideEncryption] => 
        [ETag] => "fcfc6838dfrtefr87b27b642e7d63021"
        [SSECustomerAlgorithm] => 
        [SSECustomerKeyMD5] => 
        [RequestId] => 4RTYPEFE054567369BD46D
    )

)

正在上传/tmp/phplA534j 的第 2 部分。

Guzzle\Service\Resource\Model Object
(

[structure:protected] => 
[data:protected] => Array
    (
        [ServerSideEncryption] => 
        [ETag] => "d41d8uytrf67fdfrf00b204e9800998ecf8427e"
        [SSECustomerAlgorithm] => 
        [SSECustomerKeyMD5] => 
        [RequestId] => YTYPO67167874586EF802536C
    )

)

正在上传/tmp/phplA534j 的第 3 部分。

你能帮帮我吗?

最佳答案

两件事。首先,您可以使用 SourceFile 而不是 Body:

$result = $s3->uploadPart(array(
    'Bucket'     => $bucket,
    'Key'        => $key,
    'UploadId'   => $uploadId,
    'PartNumber' => $partNumber,
    'SourceFile'       => 'Path/To/Your/File.ext')
));

其次,这不是完成上传的正确方法:

$result = $s3->completeMultipartUpload(array(

    'Bucket'   => $bucket,
    'Key'      => $key,
    'UploadId' => $uploadId,
    'MultipartUpload'    =>array('Parts'=>  $parts),
));

关于php - 低级 API 分段文件上传过程不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41391685/

相关文章:

php - 在 PHP 中,如何从 mysql 数据库中检索文件并作为电子邮件附件发送?

mysql - 我的大型 MySQL 表应使用哪种 AWS 服务?

amazon-web-services - 如何查看配置文件和真实资源之间的差异

ios - 当应用程序从后台删除或设备重启时使用 NSURLSession 恢复任务

amazon-ec2 - Spark 1.3.1 : cannot read file from S3 bucket, org/jets3t/service/ServiceException

php - Arduino Mega 2560 + ESP8266 + PHP 问题

php - 无法启动 MySQL : "Could not find domain for" running mysql on macos (Laravel Valet)

azure - 有没有一种(简单)方法将 AWS Redshift 连接到 Microsoft Azure ML?

ruby - 随机 "SignatureDoesNotMatch"禁止请求,即使通过 POST 将相同文件上传到 Amazon S3

javascript - MySQL循环只能删除第一条数据?