无法通过 curl 和 php 完成文件上传
Cannot complete file uploads with via curl and php
我一直在尝试将部分文件上传到 IBM 存储云,似乎一切正常。
涉及3个步骤
第 1 步:启动分段上传
我已经通过启动分段上传文档获得了我的 uploadedId
第 2 步:上传部分
我上传的文件大约 3504 字节 (canada1.jpg),它是通过上传部分文档分 4 个部分上传的。
这是上传部分的成功结果 (header 说 HTTP/1.1 200 OK) 根据 API 响应的要求.
文件在我的 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 步:完成分段上传
现在我尝试按照相同的文档完成分段上传。
这是关于完成分段上传的内容,这是我遇到问题的地方
向 object 发出的 POST 请求,查询参数为 uploadId 和
body 中适当的 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,但同样的问题。 post 似乎没有正确发送。谁能帮帮我
$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);
}
这真的很有趣。缺少 Post 请求
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
我一直在尝试将部分文件上传到 IBM 存储云,似乎一切正常。
涉及3个步骤
第 1 步:启动分段上传
我已经通过启动分段上传文档获得了我的 uploadedId
第 2 步:上传部分
我上传的文件大约 3504 字节 (canada1.jpg),它是通过上传部分文档分 4 个部分上传的。
这是上传部分的成功结果 (header 说 HTTP/1.1 200 OK) 根据 API 响应的要求.
文件在我的 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 步:完成分段上传
现在我尝试按照相同的文档完成分段上传。
这是关于完成分段上传的内容,这是我遇到问题的地方
向 object 发出的 POST 请求,查询参数为 uploadId 和 body 中适当的 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,但同样的问题。 post 似乎没有正确发送。谁能帮帮我
$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);
}
这真的很有趣。缺少 Post 请求
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');