繁体   English   中英

如何为 Google Apps 脚本 createFile() API 转换 bloburl/objecturl?

[英]How to convert bloburl/objecturl for Google Apps Script createFile() API?

下面的代码包含createFile() API,它需要一个 object(此处命名为“文件”)。 通过这种方式,文件可以保存在一些谷歌驱动器文件夹中

function uploadFiles(data)
{
 var file = data;
 var folder = DriveApp.getFolderById('1UWGb5Mzr9VzPUuQTr9CWD7EMYNEAzyuC');
 var createFile = folder.createFile(file);
 return createFile.getUrl();
}

现在我想把这个 function 结合到另一个网页上。 但是,另一个网页中的脚本如下:

      for (clipIndex = 0; clipIndex < unrollWordCounts(getAllWantedWords()).length; clipIndex++) {
        try {
          var clip = allClips[clipIndex];
          clip.style.display = 'None';
          var audioBlobUrl = clip.querySelector('audio').src;
          var word = clip.querySelector('p').innerText;
          var filename = word + '_' + Date.now() + '.ogg';
          saveAs(audioBlobUrl, filename);
   google.script.run.withSuccessHandler(onSuccess).uploadFiles(audioBlobUrl);
        }

我要上传到谷歌驱动器的数据是audioBlobUrl 但是,app 脚本的createFile()需要一个文件。 似乎audioBlobUrl不是文件。 我应该如何修改代码,以便它可以将预期的数据传递给谷歌createFile()以实现我的目标?

从您的回复中,我确认您的audioBlobUrl类似于blob:https://n-gtuqz5opiogjdwjt5bm3j7sgiq5rl4g7osg6piq-0lu-script.googleusercontent.com/a9f62d15-c7c1-41c0-ac5d-0a05dcb01fa6 在这种情况下,很遗憾,这个 URL 不能直接使用。 因此,为了在 Google Apps Script 中使用它,需要将其转换为数据。 在这个答案中,我想提出将 URL 转换为数据的示例脚本(在这种情况下,URL 被转换为字节数组。)。 这样,可以在 Google Apps Script 中对数据进行解码,并将数据保存为文件。

修改后的脚本:

Javascript侧:

作为一个简单的示例脚本,当使用您的audioBlobUrlfilename时,请使用以下脚本。

fetch(audioBlobUrl).then(r => r.blob()).then(blob => {
  var fr = new FileReader;
  fr.onload = f => {
    var obj = {data: [...new Int8Array(f.target.result)], mimeType: blob.type, filename};
    google.script.run.withSuccessHandler(onSuccess).uploadFiles(obj);
  };
  fr.readAsArrayBuffer(blob);
});

Google Apps 脚本方面:

在 Google Apps 脚本端,请按如下方式修改uploadFiles

function uploadFiles({data, mimeType, filename}) {
  var file = Utilities.newBlob(data, mimeType, filename || "sampleFilename");
  var folder = DriveApp.getFolderById('1UWGb5Mzr9VzPUuQTr9CWD7EMYNEAzyuC');
  var createFile = folder.createFile(file);
  return createFile.getUrl();
}

笔记:

  • google.script.run与异步进程一起运行。 似乎google.script.run在循环中使用。 虽然我不确定你的整个脚本,如果异步进程会成为你的新问题,请修改它。

  • 此修改后的脚本假设您的audioBlobUrl类似于blob:https://n-gtuqz5opiogjdwjt5bm3j7sgiq5rl4g7osg6piq-0lu-script.googleusercontent.com/a9f62d15-c7c1-41c0-ac5d-0a05dcb01fa6从您的回复请注意这一点。

  • 从你的问题我不确定你的实际情况。 当您将您的脚本用作 Web 应用程序时,当您修改脚本时,请将最新的脚本反映到 Web 应用程序中。 请注意这一点。

参考:

暂无
暂无

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

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