gpt4 book ai didi

google-apps-script - 使用 GAS 解压缩 gz 文件抛出错误异常 : Invalid argument

转载 作者:行者123 更新时间:2023-12-02 18:44:08 24 4
gpt4 key购买 nike

我正在尝试解压缩作为附件发送到我的电子邮件的 DMARC 报告。它适用于 zip 文件,但不适用于 gz 文件。

在我的代码中,我首先按主题获取正确的电子邮件。如果主题正确,则运行此脚本:

var attachments = message.getAttachments();
for(var k in attachments){
var attachment = attachments[k];
var attachmentBlob = attachment.copyBlob();
var vedleggsnavn = attachment.getName();
Logger.log(vedleggsnavn)
var vedleggstype = attachment.getContentType();
Logger.log(vedleggstype)
if(vedleggstype=='application/gzip'){
Logger.log("ja gzip");
var files = Utilities.ungzip(attachmentBlob);
}
if(vedleggstype=='application/zip'){
Logger.log("ja zip");
var files = Utilities.unzip(attachmentBlob);
}

如果附件类型是应用程序/zip,它会被解压并保存在我的 Google 云端硬盘中。如果它是一个应用程序/gzip,我会得到一个错误。这是我的日志:

  • 10:43:21 AM 信息 yahoo.no!dotl.no!1621555200!1621641599.xml.gz
  • 10:43:21 AM 信息应用程序/gzip
  • 10:43:21 AM Info ja gzip
  • 10:43:19 AM 错误异常:无效参数 lagreVedlegg @ Code.gs:42

我希望有人能帮我弄清楚如何解压缩 gz 文件,我没有找到任何关于使用 ungzip 的教程。 (我找到了他们写 gunzip 的地方,但它看起来不对。)

我找到了这个:'Invalid Argument' error with un-gzipping Blob in Apps script但是我没看懂。

有人告诉我我的代码还不够。我认为因为它适用于 zip,所以只在出现问题的地方发布代码就足够了,以使其最小化。但现在我将发布我的完整功能:

function lagreVedlegg(){
var folderID= ''; //I deleted my ID
var tittelen = "Report Domain: dotl.no";
var tittelen2 = "Report domain: dotl.no";
var tittelLengde = tittelen.length;

var eldreEnn = new Date(2021,4,21); //huska at telling starter på 0, så måned 4 er mai

var root = DriveApp.getRootFolder();
var parentFolder = DriveApp.getFolderById(folderID);
var antall = 20;

var threads = GmailApp.getInboxThreads(0, antall);
//Logger.log(threads)
for(var i in threads){
var thread = threads[i];
var message = thread.getMessages()[0]; // Get first message
//Logger.log(message)
var tittel = message.getSubject();
var tittelKort = tittel.substring(0,tittelLengde);
Logger.log(tittelKort)
var avsender = message.getFrom();
//Logger.log(avsender)
var dato = message.getDate();
//Logger.log(dato)
//Logger.log(eldreEnn)

if((tittelKort==tittelen || tittelKort==tittelen2) && dato > eldreEnn){
Logger.log(avsender); // Log from address of the message
var attachments = message.getAttachments();
for(var k in attachments){
var attachment = attachments[k];
var attachmentBlob = attachment.copyBlob();
var vedleggsnavn = attachment.getName();
Logger.log(vedleggsnavn)
var vedleggstype = attachment.getContentType();
Logger.log(vedleggstype)
if(vedleggstype=='application/gzip'){
Logger.log("ja gzip");
attachment.setContentType('application/x-gzip');
var attachmentBlob = attachment.copyBlob();
var files = Utilities.ungzip(attachmentBlob);
}
if(vedleggstype=='application/zip'){
Logger.log("ja zip");
var files = Utilities.unzip(attachmentBlob);
}
Logger.log(files)
files.forEach(function(file) {
Logger.log(file)
//Logger.log(parentFolder)
parentFolder.createFile(file);
})
}
thread.moveToArchive();
Logger.log(tittel + "flyttet")
}
}
}

最佳答案

这似乎是一个错误。 Utilities.unzip 似乎只适用于 MIME 类型为 application/x-gzip 的文件,不支持现代 application/gzip。有 a bug report on their issue tracker , 已经。单击白色星号 (☆) 为其赋予更高的优先级。

作为解决方法,您可以将内容类型设置为 application/x-gzip:

function ungzipAttahcment() {
const message = GmailApp.getMessageById('...')
const attachment = message.getAttachments()[0]
attachment.setContentType('application/x-gzip')
const blob = Utilities.ungzip(attachment)
}

关于google-apps-script - 使用 GAS 解压缩 gz 文件抛出错误异常 : Invalid argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67684736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com