【发布时间】:2014-06-15 01:18:42
【问题描述】:
我可以使用 Google Apps 脚本覆盖图像文件吗?我试过了:
file.setContent(newBlobImage);
file.replace(newBlobImage);
这些都不起作用。 .setContent() 将删除文件中的所有数据,看起来它可能只是将变量名称写为文本或类似的东西。我假设.setContent() 和.replace() 都适用于文本文档,也许这就是它们不起作用的原因。
如果是文本文件或电子表格,我也许可以清除它,然后添加新内容。
我可以删除文件,然后创建一个新文件,但如果有其他方法,我宁愿不这样做。
如果我写一个同名文件,它不会覆盖现有文件,它会创建另一个同名文件。
我能够删除文件的唯一方法是使用DocsList,而我创建图像文件的唯一成功方法是使用DriveApp。所以我必须用DocsList 删除文件,然后用DriveApp 创建另一个文件。
嗯,我已经知道如何删除文件而不将其发送到垃圾箱,所以我以后不需要清理垃圾箱。 Apps 脚本中的 Google Drive SDK 有一个 remove 方法,它不会将文件发送到垃圾箱,它只是消失了。
var myFolder = DriveApp.getFolderById('3Bg2dKau456ySkhNBWB98W5sSTM');
thisFile = myFolder.getFilesByName(myFileName);
while (thisFile.hasNext()) {
var eachFile = thisFile.next();
var idToDLET = eachFile.getId();
Logger.log('idToDLET: ' + idToDLET);
var rtrnFromDLET = Drive.Files.remove(idToDLET);
};
所以,我将DriveApp 服务和DriveAPI 结合起来删除文件而不将其发送到垃圾箱。 DriveAPI .remove 需要文件ID,但我没有文件ID,所以按名称查找文件,然后检索文件ID,然后使用ID删除文件。所以,如果我找不到覆盖文件的方法,我至少可以删除旧文件而不会将其放入垃圾箱。
我刚刚注意到DriveAPI 服务有一个Patch 和一个Update 选项。
.patch(resource, fileId, optionalArgs)
Google Documentation Patch 更新文件元数据。
resource 参数可能是元数据。 fileId 是不言自明的。我猜optionalArgs 是遵循 HTTP 请求补丁语义的参数?我不知道。
看起来 Patch 和 Update 都会更新数据。更新是一个PUT 请求,它将
如果您不提供可选参数,则清除之前设置的数据。
根据文档。因此使用 Patch 请求更安全,因为任何缺少的参数都会被忽略。我还没有尝试过,但也许这就是答案。
Patch 出现错误,所以我试试Update:
.update(resource, fileId, mediaData)
它有一个 blob 形式的 mediaData 参数。我认为这就是我所需要的。但我不确定resource 参数需要什么。所以我被困在那里了。
【问题讨论】:
标签: google-apps-script google-drive-api