亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用谷歌表格中的谷歌應用程序腳本從系統或 url 讀取圖像并將圖像發布到 API

使用谷歌表格中的谷歌應用程序腳本從系統或 url 讀取圖像并將圖像發布到 API

慕碼人8056858 2023-02-24 17:42:19
我正在嘗試使用 put 請求點擊 api 來上傳圖像,我想使用 google 表格和 google apps 腳本來完成。我可以將 url 中的圖像添加到工作表中,但不能添加到 api 中,因為它只接受 .png/.jpeg 格式,我認為目前它采用的是 blob 格式。沒有把握。任何人都可以幫助我如何使用谷歌應用程序腳本和工作表將圖像發送到 api。當我在參數中鍵入圖像作為鍵(文件類型)然后從設備上傳圖像時,我能夠使用郵遞員獲得成功響應。這是我用來實現上述目標的一些代碼:function insertImageOnSpreadsheet() {  var ss = SpreadsheetApp.getActiveSpreadsheet();  var sheet = ss.getSheetByName('Sheet1');  var response = UrlFetchApp.fetch('Enter URL Here');  var binaryData = response.getContent();  // Insert the image in cell A1.  var blob1 = Utilities.newBlob(binaryData, 'image/png', 'MyImageName');  Logger.log(blob1)        var apiHeaders =     {      "Content-Type":"application/json",      "Authorization":"Enter Token here"    }    var formData= '{"image": "'+blob1+'"}'    var eventApiResponse = callApi('Enter API Here',"put",formData,apiHeaders,"insertImageOnSpreadsheet");    Logger.log(eventApiResponse)    sheet.insertImage(blob1, 1, 3);}function callApi(targetURL, method, formData, headers,functionName) {  var options = {    "method": method,    "payload":formData,    "headers":headers}  var response = UrlFetchApp.fetch(targetURL, options);  return response; }API: livestream.com/developers/docs/api/#update-event-logo-poster有人請求幫助
查看完整描述

1 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

我相信你的目標如下。

修改點:

  • 當我看到“更新活動標志(海報)”的示例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"。


查看完整回答
反對 回復 2023-02-24
  • 1 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號