【问题标题】:How to add/append string to blob in Google Apps Script (Google Drive API)如何在 Google Apps 脚本(Google Drive API)中添加/追加字符串到 blob
【发布时间】:2015-04-24 12:31:18
【问题描述】:

这段代码确实有效,除了这部分Drive.Files.update(thefile, theFileID, updatedBlob);

var folder = DriveApp.getFolderById("0B0RcUNcUERU5MGpIaEXXXXXXXX");
var file = DriveApp.getFileById("NcUERXXXXXXXXERU5UWQUTZKY2X2"); 
var file2 = DriveApp.getFileById("NcUERXXXXXXXXERU5UWDDDDDDD2"); 

var myString = "sometext";
var updatedBlob = file.getBlob() + myString;

var myFileName = "StringAddedFile.mp4";  
var thefile = {
  title: myFileName,
  mimeType: 'video/mp4'
};

var allFilesByName = folder.getFilesByName(myFileName);
while (allFilesByName.hasNext()) {
  var thisFile = allFilesByName.next();
  var theFileID = thisFile.getId();
  var myVar = Drive.Files.update(thefile, theFileID, updatedBlob);
};

我试过了:

file.getBlob() + myString;
file.getBlob().getDataAsString() + myString;
file.getBlob().getDataAsString() + file2.getBlob().getDataAsString();
file.getAs() + file2.getAs();
file.getBlob() + file2.getBlob();

...

收到此错误消息:"The mediaData parameter only supports Blob types for upload."

如何将myString 添加/附加到file

【问题讨论】:

  • 在 Apps 脚本中,您应该使用 DriveApp 类来访问驱动器文件和文件夹。这是链接:developers.google.com/apps-script/reference/drive/drive-app
  • @KRR 谢谢,我有访问权限,只是不知道如何将 myString 添加到 blob 文件中。
  • 这与访问无关,它与您必须在 Apps 脚本中调用的类有关。希望有帮助!
  • 对不起,var myVar = Drive.Files.update(thefile, theFileID, file.getBlob());确实有效。但我想将 myString 添加到 file.getBlob() 然后更新文件 - 就像这个 file.getBlob() + myString - 但我遇到了一个错误。
  • 请发布错误。如果该字符串是否被附加,您还可以检查日志。

标签: google-apps-script google-drive-api google-apps


【解决方案1】:

您似乎正试图向mimeType: 'video/mp4' 文件添加内容。看起来您需要从字符串创建一个 blob。您可以使用实用程序服务来执行此操作。

对于字符串

  • 创建 base 64 编码字符串
  • 将字符串编码为字节数组

对于文件

  • 以 blob 形式获取文件
  • 将 blob 转换为字节

合并

  • 合并两个文件的字节
  • 使用另一个 blob 将文件更新为 blob

代码:

var myString = "sometext";
var encoded = Utilities.base64Encode(myString);
var byteDataArray = Utilities.base64Decode(encoded);

var file = DriveApp.getFileById("File ID here");
var fileAsBlob = file.getBlob();
var fileAsBytes = fileAsBlob.getBytes();

var combinedBytes = byteDataArray.concat(fileAsBytes);
var allBytesAsBlob = Utilities.newBlob(combinedBytes);

var updatedBlob = Drive.Files.update(thefile, theFileID, allBytesAsBlob);

这是一个尝试的建议。没有测试过。不知道它是否会起作用,但没有其他人回答,所以尝试一下不会有坏处。我会留给你尝试,让我知道它是否有效。

【讨论】:

  • 谢谢你,伙计,我尝试了代码 - 它确实有效,但它覆盖了整个文件。我得到了内容为“sometext”的“thefile”。也许,有一种方法可以将“sometext”附加到我现有的“video/mp4”文件中?再次。谢谢你的帮助。
  • var myString = file.getBlob().getDataAsString() + "sometext" var encoded = Utilities.base64Encode(myString); var byteDataArray = Utilities.base64Decode(encoded); var stringAsBlob = Utilities.newBlob(byteDataArray); var updatedBlob = Drive.Files.update(thefile, theFileID, stringAsBlob);确实有效 :) 再次感谢您 :) 看起来我只是遇到了一些编码问题,因为视频不再可播放。但我知道如何添加到 Blob - 非常感谢。
  • 我发布了一个新想法。但我猜你想通了。是的,我认为字符串中的字节会破坏 mp4 文件。
  • 收到此消息“mediaData 参数仅支持用于上传的 Blob 类型。”在这一行 var updatedBlob = Drive.Files.update(thefile, theFileID, combinedBytes); :)
  • 是的,我不确定如何组合字节,我只是猜测它是一个可以组合的数组。实际上,我应该使用不同的方法。使用 concat 代替。请参阅答案中的更新。
猜你喜欢
  • 2015-07-10
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 2023-04-07
相关资源
最近更新 更多