Google apps script 我可以用应用程序脚本解压缩Google Drive中的文件吗?

Google apps script 我可以用应用程序脚本解压缩Google Drive中的文件吗?,google-apps-script,google-drive-api,gzip,Google Apps Script,Google Drive Api,Gzip,这是一项后续行动 我正在尝试使用@there提供的代码,但我不断收到未知的压缩方法错误或不正确的头检查错误。当使用两种不同的gzip方法中的任何一种来创建压缩文件时,出现了错误,因此我认为该文件是正确的gzip 有什么建议吗?(我的输入文件已压缩,因此无法使用Utilities.unzip() 以下是完整的代码: reports_folder_id = 'xxxxx'; //id of folder where gzipped csv reports are saved report_name

这是一项后续行动

我正在尝试使用@there提供的代码,但我不断收到未知的压缩方法错误或不正确的头检查错误。当使用两种不同的gzip方法中的任何一种来创建压缩文件时,出现了错误,因此我认为该文件是正确的gzip

有什么建议吗?(我的输入文件已压缩,因此无法使用Utilities.unzip()

以下是完整的代码:

reports_folder_id = 'xxxxx'; //id of folder where gzipped csv reports are saved
report_name = 'xxxxxx.gz'; // name of gzipped CSV file

function importData() { 
  var fSource = DriveApp.getFolderById(reports_folder_id);
  var fi = fSource.getFilesByName(report_name); // latest report file

  eval(UrlFetchApp.fetch('https://cdn.rawgit.com/nodeca/pako/master/dist/pako.js').getContentText());

  if ( fi.hasNext() ) { // proceed if report_name file exists in the reports folder
    var file = fi.next();

    var charData = file.getBlob().getDataAsString(); // same error if .getBytes() is used

    var binData = [];
    for (var i = 0; i < charData.length; i++) {
      binData.push(charData[i] < 0 ? charData[i] + 256 : charData[i]);
    }

    var data = pako.ungzip(binData); // I get same error for pako.inflate(binData);

    var decoded = '';
    for (var i = 0; i < data.length; i++) {
      decoded += String.fromCharCode(data[i]);
    }

  }
}
reports_folder_id='xxxxx'//保存Gzip csv报告的文件夹id
报告名称='xxxxxx.gz';//gzip CSV文件的名称
函数importData(){
var fSource=DriveApp.getFolderById(报告文件夹id);
var fi=fSource.getFilesByName(报告名称);//最新报告文件
eval(UrlFetchApp.fetch('https://cdn.rawgit.com/nodeca/pako/master/dist/pako.js“).getContentText());
如果(fi.hasNext()){//如果报告文件夹中存在报告名称文件,则继续
var file=fi.next();
var charData=file.getBlob().getDataAsString();//如果使用.getBytes()则出现相同错误
var binData=[];
对于(var i=0;i
如果没有修复上述问题的建议,您对如何以编程方式解压缩gDrive文件有何想法


谢谢。

您需要了解pako是否支持gzip压缩。如果没有,您应该寻找另一个支持gzip的压缩包。

运行提供的示例代码确实会在我的环境中导致未知的压缩方法错误

试着改变

var charData = file.getBlob().getDataAsString(); // same error if .getBytes() is used

就是这样

function myFunction() {
  reports_folder_id = '<FOLDER_ID>';
  report_name = 'zip3.csv.gz'; // name of gzipped CSV file

  var fSource = DriveApp.getFolderById(reports_folder_id);
  var fi = fSource.getFilesByName(report_name);
  eval(UrlFetchApp.fetch('https://cdn.rawgit.com/nodeca/pako/master/dist/pako.js').getContentText());

  if ( fi.hasNext() ) { 
    var file = fi.next();
    var blobData = file.getBlob();

    var charData = blobData.getBytes();

    var binData = [];
    for (var i = 0; i < charData.length; i++) {
      binData.push(charData[i] < 0 ? charData[i] + 256 : charData[i]);
    }

    var data = pako.inflate(binData); 

    var decoded = '';
    for (var i = 0; i < data.length; i++) {
      decoded += String.fromCharCode(data[i]);
    }
    Logger.log(decoded);

  }

}
截至2018年1月19日()应用程序脚本现在支持gzip压缩,可使用以下
实用程序
方法访问:


pako应该支持gzip(),但是代码不起作用。对修复我的代码或使用不同的包有什么具体建议吗?谢谢。不幸的是,我在使用.getBytes()时仍然收到“错误的头检查”错误。我在我的原始输入文件上尝试了它:我还使用Total Commander来gzip一个2mb csv(),并尝试了同样的错误。我用一个工作示例编辑了答案,请检查这次是否有效。好消息。谢谢分享。
function myFunction() {
  reports_folder_id = '<FOLDER_ID>';
  report_name = 'zip3.csv.gz'; // name of gzipped CSV file

  var fSource = DriveApp.getFolderById(reports_folder_id);
  var fi = fSource.getFilesByName(report_name);
  eval(UrlFetchApp.fetch('https://cdn.rawgit.com/nodeca/pako/master/dist/pako.js').getContentText());

  if ( fi.hasNext() ) { 
    var file = fi.next();
    var blobData = file.getBlob();

    var charData = blobData.getBytes();

    var binData = [];
    for (var i = 0; i < charData.length; i++) {
      binData.push(charData[i] < 0 ? charData[i] + 256 : charData[i]);
    }

    var data = pako.inflate(binData); 

    var decoded = '';
    for (var i = 0; i < data.length; i++) {
      decoded += String.fromCharCode(data[i]);
    }
    Logger.log(decoded);

  }

}
4;02/07/2017 03.00.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.59.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.58.30;;;159.0;159.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.57.30;;;159.0;159.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.56.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.56.00;;;;;0;;0.4;Novorapid ;0;Left flank;Test