繁体   English   中英

Google Apps Script 的 BOX API - 新文件版本上传

BOX API by Google Apps Script - new file version upload

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我已经问过 GAS 社区,但我被建议继续在这里问……到目前为止,我能够连接到 BOX 并获取文件列表,我也可以从 BOX 下载文件。 整个想法是使用 BOX API 下载文件,编辑它并使用 BOX API 将其作为新文件版本上传回来。 我无法使最后一部分工作,因为它给了我错误代码 400。这是函数。

 function uploadNewFileVersion() { //767694355309 testing var boxFileId="767694355309"; var newVerFile = DriveApp.getFileById("1sK-jcaJoD0WaAcixKtlHA85pf6t8M61v").getBlob(); var confirmAuthorization = getBoxService_().getAccessToken(); //var parent = { "id": "0" }; //"name": "apiNewVersion.xlsx", //"parent": parent, var payload = { "file": newVerFile } var headers = { 'Authorization': 'Bearer ' + confirmAuthorization } var options = { "method": "post", "muteHttpExceptions": true, "contentType": "multipart/form-data", "headers": headers, "payload": payload } var apiHtml = "https://upload.box.com/api/2.0/files/"+boxFileId+"/content/"; var response = UrlFetchApp.fetch(apiHtml, options); Logger.log(response.getResponseCode()); var a = 1; }

boxFileId 是盒子上的文件。 newVerFile 是从 Box 下载并更新的文件。 我需要将其作为 Box 文件的新版本。

你能指教吗? 谢谢! 聚乙烯醇

我认为 parent 和 name 是可选的,所以我将其注释掉。 如果我没有 getBlob,那么它反而返回 415。

1 个回复

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

  • 您想使用 Box API 和 Google Apps 脚本上传 Google Drive 的文件。
  • 根据你的问题,我找不到你要使用的API方法的官方文档。 但是,从端点https://upload.box.com/api/2.0/files/"+boxFileId+"/content/在你的脚本中,我猜你想使用"Upload file version"
  • 您的访问令牌和文件 ID 的值对于使用 API 是有效的。

如果我对你的问题的理解是正确的,那么下面的修改如何?

改装要点:

  • 当我看到“上传文件版本”的官方文档时,我确认了以下示例curl。 在这种情况下,认为当以下 curl 命令转换为 Google Apps Script 时,该请求可能会起作用。

     $ 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命令中发现attributesfile是作为表单和文件发送的。
    • 而且,我认为attributes="{"name":"Contract.pdf", "parent":{"id":"11446498"}}"可能应该是attributes="{\\"name\\":\\"Contract.pdf\\", \\"parent\\":{\\"id\\":\\"11446498\\"}}"
  • 当我看到您当前的脚本时,似乎multipart/form-data用于contentType 在这种情况下,需要在请求正文中包含boundary 幸运的是,在 UrlFetchApp 中,在multipart/form-data的情况下,当没有使用contentType时,内容类型会自动包含在请求头中。 我认为在你的情况下,这可以使用。

  • 在您的脚本中,不包括attributes="{"name":"Contract.pdf", "parent":{"id":"11446498"}}" 但我认为你可能会在未来的脚本中使用它。 所以在这个答案中,这也包括在内。

反映以上几点,将官方文档中的示例 curl 命令转换为 Google Apps Script 后,脚本变为如下。

示例脚本:

请将以下脚本复制并粘贴到脚本编辑器并设置变量,然后运行myFunction函数。 这样,与示例 curl 相同的请求是使用 Google Apps 脚本请求的。

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());
}
  • 我可以确认上面的示例脚本与上面的示例 curl 是相同的请求。
  • 如果您不想使用文件元数据,请从payload删除attributes: JSON.stringify(metadata),attributes: JSON.stringify(metadata),

注意:

  • 在这种情况下,UrlFetchApp 的最大数据大小(“URL Fetch POST 大小”)为 50 MB。 请注意这一点。 参考
  • 关于 Box API 文件上传的限制,请查看https://developer.box.com/guides/uploads/
  • 如果您的访问令牌和文件 ID 无效,我认为发生了错误。 所以请注意这一点。

参考资料:

2 使用Google云端硬盘Api上传新文件修订版

我正在尝试使用Google云端硬盘Api上传多部分文档。 (特别是-PUT https://www.googleapis.com/drive/v2/files/ {fileId}) 我的环境有两个超级管理员(用户A和B)(无论出于何种原因)。 使用“超级管理员”(用户A)之一对Api进 ...

3 Google云端存储:如何更新文件的缓存版本?

我已经上传了数千个文件。 但是,当用户旋转我网站上的图像时,我会在内部更新上传的版本(通过PHP将旋转后的版本重新上传到存储桶)。 但是,谷歌不断显示相同的图像一次又一次。 但是,如果我追加?r=[number] 如果[number]是某个随机数,则正确显示更新的图像。 然后如 ...

4 NSFilemanager上传新文件,但UIWebView显示缓存的版本

我正在构建的应用程序需要定期检查已知位置的更新文件。 它恰好是PDF。 如果经过了x倍的时间,则应用需要上传文件的新副本。 以下代码段有效。 它下载文件。 但是该应用显示的是PDF的缓存版本,而不是新版本。 我通过查看应用程序捆绑包确认了这一点。 此代码运行后,肯定在Documen ...

6 如何使用新的API将新文件上传到OneDrive?

我正在尝试使用新的OneDrive API进行文件上传。 我只是从简单的文件(即&lt;100MB)开始,目的是一旦我使简单的文件正常工作,便可以恢复为可恢复的上传! 我尝试使用http://onedrive.github.io/items/upload_put.htm,但我又收到403 ...

2015-04-16 14:45:29 1 2169   onedrive
7 用google-apps-script知道文件类型

我正在尝试获取文件类型。 当我使用getFileType()函数时,仅得到“ other”,如此处所述: https : //developers.google.com/apps-script/class_docslist_filetype 那么我怎么才能真正知道类型呢? (pdf,j ...

8 Box-API获取和更新文件夹上的HTTP 411

我正在尝试使用Box API v2.0执行“更新文件夹” 关键是我直接从HTTP PUT收到以下答案 根据docs: http : //developers.box.com/docs/#folders-update-information-about-a-folder ,无需仅在A ...

2013-06-03 19:51:01 1 84   box-api
10 gcloud deploy不上传新文件

我刚刚在Python 2.7环境下偶然发现了App Engine Standard中的以下问题 因此,昨天我部署到了我的测试环境,今天我有了更新一个应用程序的想法。 我执行我的常规“ gcloud deploy ...”,它说更新3个文件...而实际上我更改了一堆文件。 基本上,我的d ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM