0

ファイルを分割して IBM ストレージ クラウドにアップロードしようとしましたが、すべて問題ないようです。

IBM ドキュメント リンク :

それには3つのステップが含まれます

ステップ 1: マルチパート アップロードを開始する

マルチパートアップロードのドキュメントを開始することで、uploadedId を取得しました

ステップ 2: パーツのアップロード

私がアップロードしたファイルは約3504 バイト(canada1.jpg) で、Uploads Part Documentation から 4 つの部分に分けてアップロードされました。

以下は、API 応答によって要求されたアップロード パーツ(ヘッダーには HTTP/1.1 200 OK と表示されます)の成功した結果です。

このファイルは、IBM バケットで事実上利用可能であり、リスト パーツを照会するたびに、以下のようにファイルのすべての詳細を取得できます。

PartNumber: 1 
ETag: "785c3d92f3222ce11c1920c656529601" 
Size: 1024 
PartNumber: 2 
ETag: "785c3d92f3222ce11c1920c656529601" 
Size: 1024 
PartNumber: 3 
ETag: "785c3d92f3222ce11c1920c656529601" 
Size: 1024 
PartNumber: 4 
ETag: "65cb76bccd0d52ca8f2ad374694012a3" 
Size: 432 

ステップ 3: マルチパート アップロードを完了する

同じドキュメントに従ってマルチパートアップロードを完了しようとしました。

これは、問題が発生しているマルチパートアップロードの完了についての内容です

クエリ パラメータ uploadId と本文の適切な XML ブロックを使用してオブジェクトに発行された POST 要求は、マルチパート アップロードを完了します。

curl -X "POST" "https://(endpoint)/(bucket-name)/(object-key)?uploadId=(upload-id)"
 -H "Authorization: bearer (token)"
 -H "Content-Type: text/plain; charset=utf-8"
 -d "<CompleteMultipartUpload>
         <Part>
           <PartNumber>1</PartNumber>
           <ETag>(etag)</ETag>
         </Part>
         <Part>
           <PartNumber>2</PartNumber>
           <ETag>(etag)</ETag>
         </Part>
       </CompleteMultipartUpload>"

これが私の問題です:

以下のコードに従ってファイルのアップロードを完了しようとすると。コードは、タイムアウトになるまでブラウザにロードされ続けます。タイムアウトをいくつか 3000 に増やしましたが、同じ問題です。投稿が正しく送信されていないようです。誰か助けてくれませんか

$url = "https://s3.us.cloud-object-storage.appdomain.cloud/mybucketname/canada1.jpg?uploadId=my-upload-id-here";

$file ='canada1.jpg';
echo $filesize = filesize($file);

$xml = '
<CompleteMultipartUpload>
<Part>
<PartNumber>1</PartNumber>
<ETag>"785c3d92f3222ce11c1920c656529601"</ETag>
</Part>
<Part><PartNumber>2</PartNumber>
<ETag>"785c3d92f3222ce11c1920c656529601"</ETag>
</Part>
<Part>
<PartNumber>3</PartNumber>
<ETag>"785c3d92f3222ce11c1920c656529601"</ETag>
</Part>
<Part>
<PartNumber>4</PartNumber>
<ETag>"65cb76bccd0d52ca8f2ad374694012a3"</ETag>
</Part>
</CompleteMultipartUpload>';


$headers = array(

"Authorization: Bearer my-access-token", 
"Host: s3.us.cloud-object-storage.appdomain.cloud",
    "Content-type: image/jpg",
    "Content-length: $filesize" ,
//"Content-length: " . strlen($xml)
);

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3000);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$data = curl_exec($ch); 
echo $data;
if(curl_errno($ch)){
    print curl_error($ch);
}
else{
    curl_close($ch);
}
4

1 に答える 1