1 回答
TA贡献1868条经验 获得超4个赞
我相信你的目标如下。
您想要使用 Google Apps 脚本请求“更新活动徽标(海报)” 。
修改点:
当我看到“更新活动标志(海报)”的示例curl命令时,如下所示。
curl -X PUT \ -u [API_SECRET_KEY] \ -F logo='@<image file location>;type=<image type>' \ --header 'Content-Type: multipart/form-data' \ 'https://livestreamapis.com/v3/accounts/18855759/events/5201483/logo'
在这种情况下,请求主体是使用字节数组创建的,因为包含二进制数据。
在这种情况下,使用基本授权。而且似乎请求主体需要
{"logo": "data"}
使用multipart/form-data
.为了发送文件数据
multipart/form-data
,需要创建请求主体。在你的脚本中,
我无法理解
"Authorization":"Enter Token here"
。但是从样本 curl 命令来看,我认为“API_SECRET_KEY”不是用 base64 编码的。在示例 curl 命令中,
"Content-Type":"application/json"
未使用。
修改脚本:
当您的脚本被修改后,它变成如下。
const url = "###"; // Please set URL you want to use. It's like "https://livestreamapis.com/v3/accounts/18855759/events/5201483/logo".
const API_SECRET_KEY = "###"; // Please set your API_SECRET_KEY
// var binaryData = UrlFetchApp.fetch('Enter URL Here').getContent();
const binaryData = DriveApp.getFileById("### fileId ###").getBlob().getBytes(); // Modified
let data = "--xxxxxxxxxx\r\n";
data += "Content-Disposition: form-data; name=\"logo\"; filename=\"sample.png\"\r\n";
data += "Content-Type: image/png\r\n\r\n";
const payload = Utilities.newBlob(data).getBytes()
.concat(binaryData)
.concat(Utilities.newBlob("\r\n--xxxxxxxxxx--").getBytes());
const options = {
method : "put",
contentType : "multipart/form-data; boundary=xxxxxxxxxx",
payload : payload,
headers: {authorization : "Basic " + Utilities.base64Encode(API_SECRET_KEY)},
};
const res = UrlFetchApp.fetch(url, options);
console.log(res.getContentText())
var blob1 = Utilities.newBlob(binaryData, 'image/png', 'MyImageName');
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet1');
sheet.insertImage(blob1, 1, 3);
在我的环境中,我可以确认上述修改脚本的请求与 curl 命令的请求相同。
在这种情况下,它假定
UrlFetchApp.fetch('Enter URL Here');
返回 PNG 或 JPEG 图像的二进制数据。请注意这一点。
笔记:
请在启用 V8 运行时的情况下使用此脚本。
在这种情况下,换行符
data
很重要。所以请注意这一点。当您的“API_SECRET_KEY”和 URL 不正确时,就会发生错误。请注意这一点。
在示例 curl 命令中,我建议
authorization : "Basic " + Utilities.base64Encode(API_SECRET_KEY)
将其作为授权标头。但如果API_SECRET_KEY
与 相同"Basic " + Utilities.base64Encode(API_SECRET_KEY)
,请尝试修改为authorization : "API_SECRET_KEY"
。
添加回答
举报