Javascript “如何修复”;例外情况:超出限额;尝试使用Google Apps脚本将图像上载到Graph API时出错?

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

我正在使用Facebook创建一个带有谷歌应用脚本的Facebook广告活动

我需要上传一张图片到我的Facebook广告帐户。我已经尝试将图像字节用作Base64 UTF-8字符串,但是当我调用API时,我得到:

异常:超出限制:URLFetch 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=' + 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