Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 谷歌应用程序脚本提供的BOX API-新文件版本上传_File_Google Apps Script_Version_Box Api - Fatal编程技术网

File 谷歌应用程序脚本提供的BOX API-新文件版本上传

File 谷歌应用程序脚本提供的BOX API-新文件版本上传,file,google-apps-script,version,box-api,File,Google Apps Script,Version,Box Api,我已经问过燃气界,但有人建议我继续在这里问。。。 到目前为止,我可以连接到BOX并获得文件列表,还可以从BOX下载文件。 整个想法是使用BOX API下载一个文件,对其进行编辑,然后使用BOX API将其作为新的文件版本上传回来。 我无法使最后一部分工作,因为它给我错误代码400。 下面是函数 函数uploadNewFileVersion(){ //767694355309测试 var-boxFileId=“767694355309”; var newVerFile=DriveApp.getF

我已经问过燃气界,但有人建议我继续在这里问。。。 到目前为止,我可以连接到BOX并获得文件列表,还可以从BOX下载文件。 整个想法是使用BOX API下载一个文件,对其进行编辑,然后使用BOX API将其作为新的文件版本上传回来。 我无法使最后一部分工作,因为它给我错误代码400。 下面是函数

函数uploadNewFileVersion(){
//767694355309测试
var-boxFileId=“767694355309”;
var newVerFile=DriveApp.getFileById(“1sK-jcaJoD0WaAcixKtlHA85pf6t8M61v”).getBlob();
var confirAuthorization=getBoxService_uxService().getAccessToken();
//var parent={“id”:“0”};
//“名称”:“apiNewVersion.xlsx”,
//“家长”:家长,
var有效载荷={
“文件”:newVerFile
}
变量头={
“授权”:“持有人”+确认授权
}
变量选项={
“方法”:“发布”,
“muteHttpExceptions”:true,
“contentType”:“多部分/表单数据”,
“标题”:标题,
“有效载荷”:有效载荷
}
var apichtml=”https://upload.box.com/api/2.0/files/“+boxFileId+”/content/”;
var response=UrlFetchApp.fetch(apiHtml,选项);
Logger.log(response.getResponseCode());
var a=1;

}
我相信你的目标和情况如下

  • 您想使用带有Google应用程序脚本的Box API上传Google Drive文件
  • 从您的问题中,我找不到您想要使用的API方法的官方文档。但是,从端点
    https://upload.box.com/api/2.0/files/“+boxFileId+”/content/
    在您的脚本中,我猜您想使用
  • 访问令牌和文件ID的值对于使用API是有效的
如果我对你的问题的理解是正确的,那么下面的修改如何

修改点:
  • 当我看到的官方文件时,我确认了以下示例。在本例中,我们认为当下面的curl命令转换为GoogleApps脚本时,请求可能会起作用

      $ curl -i -X POST "https://upload.box.com/api/2.0/files/12345/content" \
           -H "Authorization: Bearer <ACCESS_TOKEN>" \
           -H "Content-Type: multipart/form-data" \
           -F attributes="{"name":"Contract.pdf", "parent":{"id":"11446498"}}" \
           -F file=@<FILE_NAME>
    
    • 我可以确认上面的示例脚本与上面的示例curl是相同的请求
    • 如果您不想使用文件元数据,请从
      有效负载
      中删除
      属性:JSON.stringify(元数据)
    注:
    • 在这种情况下,UrlFetchApp的最大数据大小(“URL Fetch POST大小”)为50 MB。请小心这个
    • 关于Box API文件上传的限制,请查看
    • 如果您的访问令牌和文件ID无效,我认为会发生错误。所以请小心这个
    参考资料:

    通过猜测您想要使用的API方法,我提出了一个示例脚本作为答案。你能确认一下吗?不幸的是,我无法确认该脚本是否适用于您想要使用的API,因为我没有该脚本的帐户。因此,当我提出的答案不是你问题的直接解决方案时,我道歉。
    function myFunction() {
      const accessToken = "###"; // Please set your access token.
      const fileId = "###"; // Please set your fileId.
      const fileBlob = DriveApp.getFileById("1sK-jcaJoD0WaAcixKtlHA85pf6t8M61v").getBlob();
      const metadata = {name: "Contract.pdf", parent: {id: "11446498"}};  // Please set your file metadata.
    
      const params = {
        method: "post",
        headers: {Authorization: `Bearer ${accessToken}`},
        payload: {
          attributes: JSON.stringify(metadata),
          file: fileBlob,
        },
        muteHttpExceptions: true,
      };
      const url = `https://upload.box.com/api/2.0/files/${fileId}/content`;
      const res = UrlFetchApp.fetch(url, params);
      console.log(res.getContentText());
    }