2016-12-30 82 views
3

我們正試圖通過多部分文件上傳過程上傳文件。通過使用下面給出的代碼:低級API多部分文件上傳過程不起作用

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部分。

你能幫我嗎?

回答

1

兩件事。首先,你可以使用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), 
));