[英]Read Images from system or url using google apps script in google sheets and post image to an API
我是新来的。
我正在尝试使用 put 请求上传图像来访问 api,我想使用谷歌表格和谷歌应用程序脚本来完成。 我可以将图像从 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
有人请帮忙
我相信你的目标如下。
当我看到“更新事件徽标(海报)”的示例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'
multipart/form-data
将请求正文发送{"logo": "data"}
到“files”。multipart/form-data
发送文件数据,需要创建请求正文。
在你的脚本中,
"Authorization":"Enter Token here"
。 但是从示例 curl 命令中,我认为“API_SECRET_KEY”不是用 base64 编码的。"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);
UrlFetchApp.fetch('Enter URL Here');
返回 PNG 或 JPEG 图像的二进制数据。 请注意这一点。data
中的换行符很重要。 所以请注意这一点。authorization : "Basic " + Utilities.base64Encode(API_SECRET_KEY)
作为授权标头。 但是如果API_SECRET_KEY
与"Basic " + Utilities.base64Encode(API_SECRET_KEY)
,请尝试修改为authorization : "API_SECRET_KEY"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.