我正在尝试使用python脚本中预先指定的URL进行多部分上传。这些URL由我的java后端生成
1-IinitiateMultipartUploadRequest(String bucketName, String objectKey)
和getuploadId
。
2-在我的python脚本中,我计算了部分的数量(例如,对于5GB文件,我有10部分500MB)
3-从脚本中,我调用后端以生成所有预签名的urlList<String> generateUrls(int nbParts, String bucketName, String objectKey, String uploadId)
我得到了这些网址:
['https://XXXXXXX/bmaap_test/multipart-test/chectl-linux-x64.tar.gz?AWSAccessKeyId=O2WPRORAGHXKBLCB6BY6&Expires=1611254907&PartNumber=1&UploadId=00000177260F96DB006E1CBCF94D112F&Signature=y5%2FhsWgL1RHv8VAnoKFDf3kgq%2Bg%3D', 'https://XXXXXXX/bmaap_test/multipart-test/chectl-linux-x64.tar.gz?AWSAccessKeyId=O2WPRORAGHXKBLCB6BY6&Expires=1611254907&PartNumber=2&UploadId=00000177260F96DB006E1CBCF94D112F&Signature=vt0hpadC3KKHWUWAw9Cr2pdUWKA%3D']
脚本生成了一些url,但是当我试图从python中使用这些url时
#Generate presigned urls
url = "http://localhost:8080/s3/generateListPresignedUrls"
params={'bucketName': 'bmap-catalogue-data', 'objectKey': 'bmaap_test/multipart-test/chectl-linux-x64.tar.gz', 'nbParts': nbParts, 'uploadId': uploadId}
response = requests.get(url, params = params)
stringList = response.text
str1 = stringList.replace(']','').replace('[','')
listPresignedUrl = str1.replace('"','').split(",")
# we load the data
print(listPresignedUrl)
parts = []
#sys.stdout = open("log.txt", "w")
with open(filePath, 'rb') as f:
i = 0
while i < nbParts:
print("Upload part "+ str(i))
file_data = f.read(max_size)
params={'uploadId': uploadId, 'partNumber': int(i+1)}
response = requests.put(url, data=file_data)
print(response.headers)
print(response.text)
etag = response.headers['ETag']
parts.append({'eTag': etag, 'partNumber': int(i+1)})
print(parts)
i = i+1
我得到了这个例外
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><RequestId>0073000001771B5A70864A6D0499635C</RequestId><HostId>RK9lG2UqStX9VB1+V+0veBulp7geOgTYtiaI9cliex8QYDq0hR8OLS2wrI7drf2O</HostId>
<AWSAccessKeyId>O2WPRORAGHXKBLCB6BY6</AWSAccessKeyId>
<SignatureProvided>PzvaVA6tLdWgz3dIWACNdjT4sUA=</SignatureProvided><StringToSign>PUT
当我在生成URL时删除uploadId和partnumber时,我可以上传数据,但多部分请求不起作用。所以我需要请求中的uploadId和partNumber
请问,为什么带有额外参数的预签名url不起作用? 提前谢谢
我在我的用例中使用这些tuto: https://github.com/sandyghai/AWS-S3-Multipart-Upload-Using-Presigned-Urlhttps://medium.com/altostra/multipart-uploads-with-s3-pre-signed-urls-d98712cc4da2
目前没有回答
相关问题 更多 >
编程相关推荐