繁体   English   中英

使用签名和策略返回正文的 Google 应用脚本将图像上传到 Amazon S3 格式不正确 multipart/form-data

[英]Google app script upload image to Amazon S3 using signature and policy return body is not well-formed multipart/form-data

我正在创建一个自动化工具,以使用给定的策略、签名和其他参数将我的图像上传到 Amazon S3。 我可以在 Postman 或 Insomnia 上轻松执行此请求,但似乎很难用代码完成。 我也尝试了一些 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)

谷歌应用程序脚本返回:您的 POST 请求的正文不是格式良好的 multipart/form-data。 Python 脚本甚至无法完成请求,它得到了 ConnectionError(查看下面链接中的图片)

我试图将它作为原始身体传递,但仍然无法正常工作。 我得到的最接近的一个是将 imageBlob 替换为 Utilities.base64Encode(imageBlob.getBytes()) 然后将其放在原始文本正文中(检查注释代码),我得到了成功代码,但是当重新检查它是无效图像时。 这是我找到的文档: https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingHTTPPOST.html

您可以在此处查看我的成功 Postman 请求和我的 python 代码: https://drive.google.com/drive/folders/1Jb0-Octm_Sharing

谢谢,

我删除了“内容类型”,它适用于 python 脚本和 Google 应用程序脚本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM