Google apps script 如何在谷歌应用程序脚本中更新zip?
我试图在谷歌应用程序脚本中更新一个zip文件,但我似乎无法让它工作 以下是导致问题的代码摘录:Google apps script 如何在谷歌应用程序脚本中更新zip?,google-apps-script,Google Apps Script,我试图在谷歌应用程序脚本中更新一个zip文件,但我似乎无法让它工作 以下是导致问题的代码摘录: var filenameToGet = filename+'.zip'; var theFilesRetrieved = folder.getFilesByName(filenameToGet); if (theFilesRetrieved.hasNext() === false) { // if no file is found then create it folder.creat
var filenameToGet = filename+'.zip';
var theFilesRetrieved = folder.getFilesByName(filenameToGet);
if (theFilesRetrieved.hasNext() === false) {
// if no file is found then create it
folder.createFile( Utilities.zip([ fileXYZ ], filename+'.zip') );
} else {
while (theFilesRetrieved.hasNext()) {
var fileZIP = theFilesRetrieved.next();
fileZIP.setContent( Utilities.zip([ fileXYZ ]).getBytes() );
}
}
如果“filename.zip”不存在,脚本将正确创建zip文件
如果“filename.zip”确实存在,则创建的文件已损坏。这让我相信这句话是错误的:
fileZIP.setContent( Utilities.zip([ fileXYZ ]).getBytes() );
我也尝试过.getDataAsString()和Utilities.zip([fileXYZ]),但这些也会创建一个损坏的zip文件
(fileXYZ是一个文件blob)
如何更新已经存在的zip文件的内容?该方法需要一个字符串作为其参数。这适用于文本文件,但不适用于zip存档等二进制文件
为了覆盖二进制文件的内容,需要(必须在使用之前)如下所示。具体地说,使用Drive.Files.update
,将元数据对象作为第一个参数传递,将文件Id作为第二个参数传递,将blob作为第三个参数传递
Drive.Files.update({mimeType: 'application/zip'}, fileZIP.getId(), Utilities.zip([fileXYZ]));
在脚本的上下文中也是如此:
var filenameToGet = filename+'.zip';
var theFilesRetrieved = folder.getFilesByName(filenameToGet);
if (theFilesRetrieved.hasNext() === false) {
// if no file is found then create it
folder.createFile( Utilities.zip([ fileXYZ ], filename+'.zip') );
} else {
while (theFilesRetrieved.hasNext()) {
var fileZIP = theFilesRetrieved.next();
Drive.Files.update({mimeType: 'application/zip'}, fileZIP.getId(), Utilities.zip([fileXYZ]));
}
}
我尝试了fileZIP.setContent(Utilities.base64Encode(Utilities.zip([fileXYZ]).getBytes());但这也没有生成有效的zip文件。这就是你的意思吗?是的,我猜错了。请看重写的答案。我想您错过了这里嵌套的括号集-我实际上只使用一个参数调用createFile,一个由Utilities.zip创建的blob。