2016-04-22 10 views
1

Google Apps Scriptでzipファイルを更新しようとしていますが、動作させられないようです。ここで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.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"が存在する場合、作成されたファイルが破損しています。 )私は.getDataAsStringを(試してみました

fileZIP.setContent(Utilities.zip([ fileXYZ ]).getBytes()); 

とちょうどUtilities.zip([fileXYZ])だけでなく、これらはまた、壊れたzipファイルを作成します。これらは、それは間違っている。このラインであると信じて私をリードファイル。

(fileXYZはファイルblobです)。

alreadysが存在するzipファイルの内容を更新するにはどうすればよいですか?

+0

私はあなたがここに括弧のネストされたセットを逃したと思います。 – user1464409

答えて

1

メソッドsetContentは、引数として文字列が必要です。これはテキストファイルには適していますが、zipアーカイブなどのバイナリファイルには適していません。

バイナリファイルの内容を上書きするには、Advanced Drive Service(使用前にはenabledである必要があります)が必要です(Sandy Good explained here)。具体的には、Drive.Files.updateを使用し、メタデータオブジェクトを第1引数として、ファイルIDを第2引数として、ブロブを第3引数として渡します。スクリプトのコンテキスト内で同じ

Drive.Files.update({mimeType: 'application/zip'}, fileZIP.getId(), Utilities.zip([fileXYZ])); 

: - 私は実際には一つの引数、Utilities.zipによって作成されたブロブでのCreateFileを呼び出しています

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])); 
    } 
} 
+0

私は* fileZIP.setContent(Utilities.base64Encode(Utilities.zip([fileXYZ])。getBytes())); *を試みましたが、有効なzipファイルを生成しませんでした。それはあなたの意味ですか? – user1464409

+1

ええ、私の推測は間違っていた。書き直された答えを見てください。 –

関連する問題