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"
。
添加回答
舉報