Google应用程序脚本使用签名和策略将图像上载到Amazon S3返回体的格式不正确multipart/formdata

2024-09-27 07:32:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个自动化工具,使用给定的策略、签名和其他参数将图像上传到AmazonS3。我可以在邮递员或失眠症患者身上轻松地执行此请求,但似乎很难用代码完成。我也试过一些python代码,但不起作用

uploadImage(name, imageBlob, token) { name += imageBlob.getName() let data = { 'name': name, 'key': token.key, 'Filename': token.key, "success_action_status": "201", 'AWSAccessKeyId': token.AWSAccessKeyId, 'policy': token.policy, 'signature': token.signature, 'file': imageBlob } // let boundary = "---1011100000110100"; // let rawdata = ""; // for (let i in data) { // rawdata += "--" + boundary + "\r\n"; // rawdata += "Content-Disposition: form-data; name=\"" + i + "\"; \r\n\r\n" + data[i] + "\r\n"; // } // rawdata += "--" + boundary + "--\r\n"; // console.log(data.key) const url = 'https://s3.amazonaws.com/someExPath/' const headers = { 'content-type': "multipart/form-data", } const opt = { contentType: 'multipart/form-data', headers: headers, method: 'post', payload: data, followRedirects: true, muteHttpExceptions: true } let resp = UrlFetchApp.fetch(url, opt) console.log(resp) console.log(resp.text) return name }

这是我的python代码

import requests
url = "https://s3.amazonaws.com/samplePath/"
payload={
    'name': 'demo1.jpg',
    'key': 'tmp/sampleIds=/${filename}',
    'Filename': 'tmp/sampleIds=/${filename}',
    'success_action_status': '201',
    'AWSAccessKeyId': 'AKIAIDO4Q6WXHCGAMHIA',
    'policy': 'sample polici',
    'signature': 'sample sig'
}
files=[
  ('file',('demo1.jpg',open('demo1.jpg','rb'),'image/jpeg'))
]
headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36',
  'content-type': 'multipart/form-data'
}
resp = requests.post(url, headers=headers, data=payload, files=files)

google应用程序脚本返回:POST请求的主体不是格式良好的多部分/表单数据。 Python脚本甚至无法完成请求,它得到了一个ConnectionError(查看下面链接上的图片)

我试着把它当作一个未加工的身体来传递,但还是不起作用。我得到的最接近的一个是用Utilities.base64Encode(imageBlob.getBytes())替换imageBlob,然后将其放在原始文本体上(检查注释代码),我得到了成功代码,但重新检查时它是无效的图像。这是我找到的文件:https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingHTTPPOST.html

您可以在此处查看我的成功邮递员请求和我的python代码: https://drive.google.com/drive/folders/1Jb0-OctmXDy_rDD-Jk_N_QyrADHKamB2?usp=sharing

谢谢


Tags: key代码namehttpsformcomtokenurl

热门问题