Javascript “如何修复”;例外情况:超出限额;尝试使用Google Apps脚本将图像上载到Graph API时出错?
我正在使用Facebook创建一个带有谷歌应用脚本的Facebook广告活动 我需要上传一张图片到我的Facebook广告帐户。我已经尝试将图像字节用作Base64 UTF-8字符串,但是当我调用API时,我得到: 异常:超出限制:URLFetch URL长度 基本上,字符串太长了 我正在使用以下代码:Javascript “如何修复”;例外情况:超出限额;尝试使用Google Apps脚本将图像上载到Graph API时出错?,javascript,facebook-graph-api,google-apps-script,facebook-marketing-api,Javascript,Facebook Graph Api,Google Apps Script,Facebook Marketing Api,我正在使用Facebook创建一个带有谷歌应用脚本的Facebook广告活动 我需要上传一张图片到我的Facebook广告帐户。我已经尝试将图像字节用作Base64 UTF-8字符串,但是当我调用API时,我得到: 异常:超出限制:URLFetch URL长度 基本上,字符串太长了 我正在使用以下代码: function uploadTest2() { var image_id = 'blabla'; var image_blob = DriveApp.getFileById(image
function uploadTest2() {
var image_id = 'blabla';
var image_blob = DriveApp.getFileById(image_id).getBlob();
var input = image_blob.getBytes();
var docImg = Utilities.base64Encode(input);
var account_id = '1111111111111';
var facebookUrl =
'https://graph.facebook.com/v7.0' +
'/act_' + account_id +
'/adimages?bytes=' + docImg +
'&access_token=' + TOKEN;
Logger.log(facebookUrl);
//var encodedFacebookUrl = encodeURI(facebookUrl);
var options = {
'method' : 'post'
};
var response = UrlFetchApp.fetch(facebookUrl, options);
var results = JSON.parse(response);
Logger.log(response);
}
图像不超过5MB,我已经用在线解码器检查了字节字符串以验证它
你知道如何在post请求中直接使用图像URL吗
代码的第二个版本:
function uploadTest2() {
var image_id = 'blabla';
var image_blob = DriveApp.getFileById(image_id).getBlob();
var input = image_blob.getBytes();
var docImg = Utilities.base64Encode(input);
var account_id = '1111111111111';
var facebookUrl =
'https://graph.facebook.com/v7.0' +
'/act_' + account_id +
// '/adimages?bytes=' + encodedImage +
// '&access_token=' + TOKEN;
'/adimages?access_token=' + TOKEN;
Logger.log(facebookUrl);
//var encodedFacebookUrl = encodeURI(facebookUrl);
var options = {
'method' : 'post',
'payload' : image_blob
};
var response = UrlFetchApp.fetch(facebookUrl, options);
var results = JSON.parse(response);
Logger.log(response);
}
解决方案
为了使用UrlFetchApp.fetch()
对图像进行post请求,必须提供方法、有效负载(即您希望post
)以及有时的内容类型(如果我们传递的不是JavaScript对象)
如果要传递从blob获得的base64Encode
对象,则应将此JSON对象字符串化
原始海报缺少的是传递有效载荷,在我的贡献和他的工作之后,他最终通过编辑选项变量解决了问题,例如:
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload': JSON.stringify({"bytes": docImg,"name" : 'Test'})};
}
文件参考:
你应该在问题中包含你所写的相关代码(如果有),描述你已经尝试了什么来达到预期的结果,或者至少在发帖之前说明你做了什么。不遵循本指南的问题往往会被关闭和删除。请参阅。+请参阅
UrlFetchApp
:URL-Fetch-URL-length 2kB/call。还要注意的是,后体大小应低于50MB。嗨!感谢您的建议@Olegvater!我已经修改了我的答案,以便更清楚地显示我已经完成的一些工作。您是否尝试将image\u blob
作为选项中的有效负载添加为var options={'method':'post','payload':image\u blob}代码>?这一点最好在图中显示出来。如果这能解决您的问题,请告诉我。@OlegValter和@MateoRandwolf-非常感谢您的帮助!!最后,我使用了下面的代码,它工作了-var选项={'method':'post','contentType':'application/json','payload':json.stringify({“bytes”:docImg,“name”:'Test'})代码>:D