【问题标题】:Cannot complete file uploads with via curl and php无法通过 curl 和 php 完成文件上传
【发布时间】:2020-01-05 17:35:58
【问题描述】:

我一直在尝试将部分文件上传到 IBM 存储云,一切似乎都很好。

IBM Documentation Link :

涉及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 的对象发出的 POST 请求和 正文中相应的 XML 块将完成分段上传

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);
}

【问题讨论】:

  • &lt;ETag&gt;"785c3d92f3222ce11c1920c656529601"&lt;/ETag&gt; 中的引用似乎是错误的
  • 同样的问题。去掉双引号后不发送数据。

标签: php ibm-cloud-storage


【解决方案1】:

这真的很有趣。缺少发帖请求

curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');

【讨论】:

    猜你喜欢
    • 2020-02-10
    • 2011-08-04
    • 2016-02-22
    • 2017-10-25
    • 2016-03-19
    • 1970-01-01
    • 2016-06-07
    • 2016-02-19
    • 2019-05-29
    相关资源
    最近更新 更多