Php AWS getSignedUrl,带有上载ID和零件号

Php AWS getSignedUrl,带有上载ID和零件号,php,amazon-s3,aws-sdk-js,aws-php-sdk,Php,Amazon S3,Aws Sdk Js,Aws Php Sdk,我正在尝试将以下JS转换为PHP: client.getSignedUrl('uploadPart'{ Bucket:config.Bucket, 钥匙:钥匙, UploadId:UploadId, 零件号:零件号, 正文:“”, 过期时间:毫秒('5分钟')/1000 },(错误,url)=>{ 如果(错误){ 下一个(错误) 返回 } res.json({url}) }) 我在AWS文档中找不到PHP的等价物,我也找不到“UploadId”和“PartNumber”在文档中的引用位置 有

我正在尝试将以下JS转换为PHP:

client.getSignedUrl('uploadPart'{
Bucket:config.Bucket,
钥匙:钥匙,
UploadId:UploadId,
零件号:零件号,
正文:“”,
过期时间:毫秒('5分钟')/1000
},(错误,url)=>{
如果(错误){
下一个(错误)
返回
}
res.json({url})
})

我在AWS文档中找不到PHP的等价物,我也找不到“UploadId”和“PartNumber”在文档中的引用位置

有人知道我遗漏了什么吗


我正在尝试使用AWS S3创建一个多部分上传。我不确定这是不是丢失的那块,但我相信是的

如果我使用AWS multipart upload在PHP端上传一个大文件,它就可以工作了。但我需要做的是将上传过程移动到客户端。为了做到这一点,我需要一个预签名的URL上传到

上面的代码片段来自Uppy companion控制器。我很确定它会生成一个带有一些数据的预签名URL,比如UploadId和PartNumber。我还没有找到一种方法来实现这个服务器端/PHP

这会生成一个URL,我可以上传到它,但我不认为它会添加UploadId和PartNumber:

$cmd=$client->getCommand('PutObject'[
“Bucket”=>“Bucket name”,
“Key”=>$Key,
'UploadId'=>$UploadId,//我在文档中没有看到对此的引用
'PartNumber'=>$PartNumber,//或此。
]);
当我在使用预签名URL上传部件后尝试完成上传时,请使用以下代码:

$result=$client->completeMultipartUpload([
“Bucket”=>“Bucket name”,
“Key”=>$Key,
'UploadId'=>$UploadId,
“多端口加载”=>[
“零件”=>$Parts,
],
]);
我得到以下错误:

在上执行“CompleteMultipartUpload”时出错https://bucket-name.s3.amazonaws.com/NewProject.png?uploadId=nlWLdbNgB9zgarpLBXnj17eOIGAmQM_xyBArymtwdM71fhbFvveggDmL6fz4blz.B95TLhMatDvodbMb5p2ZMKqdlLeLFoSW1qcu33aRQTlt6NbiP_dkDO90DFO.pWGH"; AWS HTTP错误:客户端错误:
POSThttps://bucket-name.s3.amazonaws.com/NewProject.png?uploadId=nlWLdbNgB9zgarpLBXnj17eOIGAmQM_xyBArymtwdM71fhbFvveggDmL6fz4blz.B95TLhMatDvodbMb5p2ZMKqdlLeLFoSW1qcu33aRQTlt6NbiP_dkDO90DFO.pWGH
导致
400错误请求
响应: InvalidPart找不到一个或多个指定零件。零件可能没有(截断…) InvalidPart(客户端):找不到一个或多个指定部件。部件可能尚未上载,或者指定的实体标记可能与部件的实体标记不匹配。-<代码>无效零件找不到一个或多个指定零件。部件可能尚未上载,或者指定的实体标记可能与部件的en不匹配”


我找到了PHP的等价物

$command=$client->getCommand('UploadPart'[
“Bucket”=>“Bucket名称”,
“Key”=>$Key,
“PartNumber”=>$PartNumber,
'UploadId'=>$UploadId,
'正文'=>'',
]);
$presignedUrl=$client->createPresignedRequest($command,'+20分钟');
$presignedUrlString=(字符串)$presignedUrl->getUri();

可能是这样吗?如果不是这样,那么首先解释一下您在这里实际要实现的目标,您要执行的特定操作。@CBroe添加了一些附加信息。我只是尝试通过客户端上传AWS多部分上传的不同部分。我需要一个预签名的URL来实现这一点,我需要请相信预先签名的URL需要有信息UploadId和PartNumber,否则它将被视为常规文件而不是多部分文件。