使用Google Apps脚本覆盖图像文件

Ala*_*lls 5 google-apps-script google-drive-api

我可以使用Google Apps脚本覆盖图像文件吗?我试过了:

file.setContent(newBlobImage);
file.replace(newBlobImage);
Run Code Online (Sandbox Code Playgroud)

这些都不奏效. .setContent()将删除文件中的任何数据,看起来它可能只是将变量名称写为文本,或类似的东西.我假定这两个.setContent().replace()是指文本文档,也许这就是为什么他们不工作.

如果它是文本文件或电子表格,我可以清除它,然后添加新内容.

我可以删除文件,然后创建一个新文件,但如果有其他方法,我宁愿不要.

如果我写一个具有相同名称的文件,它将不会覆盖现有文件,它会创建另一个具有相同名称的文件.

我能够删除文件的唯一方法是使用,DocsList并且我创建图像文件的唯一成功是DriveApp.所以我必须删除文件DocsList,然后创建另一个文件DriveApp.

好吧,我已经弄清楚如何删除文件而不将其发送到垃圾箱,所以我不需要在以后清理垃圾.Google Drive SDKApps脚本的内部有一个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);
};
Run Code Online (Sandbox Code Playgroud)

所以,我正在组合DriveApp服务和DriveAPI删除文件而不将其发送到垃圾箱.在DriveAPI卸下摆臂需要的文件编号,但我没有文件ID,所以文件可以通过名字查找,然后将文件ID检索,然后ID用于删除该文件.所以,如果我找不到覆盖文件的方法,我至少可以删除旧文件,而不会丢弃它.

我刚才注意到,DriveAPI服务有一个PatchUpdate选择.

.patch(resource, fileId, optionalArgs)
Run Code Online (Sandbox Code Playgroud)

Google文档修补程序 更新文件元数据.

resourcearg是可能的元数据.这fileId是自我解释的.我猜这optionalArgs是参数遵循HTTP请求补丁语义?我不知道.

看起来Patch和Update都会更新数据.更新是一个PUT请求

如果不提供可选参数,则清除先前设置的数据.

根据文件.因此,使用Patch请求更安全,因为任何缺少的参数都会被忽略.我还没有尝试过,但也许这就是答案.

我收到了错误Patch,所以我会尝试Update:

.update(resource, fileId, mediaData)
Run Code Online (Sandbox Code Playgroud)

这有一个blob形式的mediaData arg.而且我认为这就是我需要的.但我不确定resource参数需要什么.所以我被困在那里.

Ala*_*lls 8

我想通了.我可以使用Google Apps脚本和DriveAPI覆盖图像文件.我正在使用:

.update(File resource, String fileId, Blob mediaData)
Run Code Online (Sandbox Code Playgroud)

在哪里file resource:

var myFileName = 'fileName' + '.jpg';

var file = {
  title: myFileName,
  mimeType: 'image/jpeg'
};
Run Code Online (Sandbox Code Playgroud)

我正在使用DriveApp服务获取文件ID,而Blob是用户上传的内容.

为了使用DriveAPI,您需要通过将其添加Resources,Advanced Google Services菜单.设置Drive APION.

var file = {
  title: myFileName,
  mimeType: 'image/jpeg'
};

var myFolder = DriveApp.getFolderById('Folder ID');

var allFilesByName = myFolder.getFilesByName(myFileName);

while (allFilesByName.hasNext()) {
  var thisFile = allFilesByName.next();
  var theFileID = thisFile.getId();
  Logger.log('theFileID: ' + theFileID);

  var myVar = Drive.Files.update(file, theFileID, uploadedBlob);
};
Run Code Online (Sandbox Code Playgroud)

  • 也在这里更新以帮助他人。在团队驱动的情况下,最后添加 `supportsTeamDrives` 参数。像这样`Drive.Files.update({ title: currentFile.getName(), mimeType: currentFile.getMimeType() }, currentFile.getId(), blobOfNewContent,{supportsTeamDrives: true});` (3认同)