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服务有一个Patch和Update选择.
.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参数需要什么.所以我被困在那里.
我想通了.我可以使用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 API为ON.
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)
| 归档时间: |
|
| 查看次数: |
2710 次 |
| 最近记录: |