Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何在谷歌应用程序脚本中更新zip?_Google Apps Script - Fatal编程技术网

Google apps script 如何在谷歌应用程序脚本中更新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

我试图在谷歌应用程序脚本中更新一个zip文件,但我似乎无法让它工作

以下是导致问题的代码摘录:

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。