首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Gmail到Google的XLSX :无效的mime类型。内容类型似乎是应用程序/八进制?

从Gmail到Google的XLSX :无效的mime类型。内容类型似乎是应用程序/八进制?
EN

Stack Overflow用户
提问于 2020-03-15 13:21:56
回答 2查看 2.8K关注 0票数 0

我试图使用Google脚本从Gmail附件导入xlsx文件到Google (作为Google )。我尝试在GAS中使用,但是这样做会导致以下错误:

对drive.files.insert的API调用失败,错误:提供了无效的mime类型

我发现Gmail附件被导入到Google脚本中,而不是application/vnd.ms-excel,我认为这就是问题所在。但是,附件是一个xlsx文件,我不明白为什么它会被认为是应用程序/八进制文件。

请记住,我想将XLSX转换为Google。因此,我需要MimeType。下面是代码:

代码语言:javascript
复制
 var mail  = GmailApp.search("XXXXXXX")[0];
  var msg = mail.getMessages()[0]
  var attachment = msg.getAttachments()[0];
  var blob =attachment
  var name = attachment.getName();
  var folderId = 'XXXXXX'; 

  var file = {
    title: 'Converted Spreadsheet',
   parents: [{id: folderId}],
    mimeType: MimeType.GOOGLE_SHEETS
  };
  file = Drive.Files.insert(file, blob, {convert: true})

有没有人知道如何修复这个错误,或者找到另一种方法将这个XLSX转换成一个工作表?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2020-03-16 00:37:38

  • 在您的情况下,附件文件的mimeType of blobapplication/octet
  • blob实际上是一个XLSX文件。
  • blob of application/octetDrive.Files.insert()一起使用时,会发生Invalid mime type provided错误。
  • 您希望将上面blob的XLSX文件转换为Google电子表格,并将其创建为一个文件。
  • 您希望使用Google脚本来实现这一点。

如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一。

问题和解决办法:

  • 当mimeType of blobapplication/octet时,
    • 运行Drive.Files.insert({title: 'Converted Spreadsheet', parents: [{id: "root"}], mimeType: MimeType.GOOGLE_SHEETS}, blob, {convert: true})时,会发生Invalid mime type provided错误。
    • 运行Drive.Files.insert({title: 'Converted Spreadsheet', parents: [{id: "root"}]}, blob, {convert: true})时,不会发生错误。但是创建的文件的mimeType是application/octet。这样,该文件就不能直接在Google上打开。在这种情况下,需要将已创建文件的mimeType更改为XLSX。我认为这是因为This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.参考

从上述情况出发,在这个答案中,我建议在运行XLSX之前将XLSX的mimeType设置为blob

修改脚本:

修改脚本时,请按以下方式修改。

发自:

代码语言:javascript
复制
var blob =attachment

至:

代码语言:javascript
复制
var blob = attachment.setContentType(MimeType.MICROSOFT_EXCEL);  // MimeType.MICROSOFT_EXCEL or MimeType.MICROSOFT_EXCEL_LEGACY

至:

如果blob具有带有扩展名的文件名,则还可以使用以下脚本。在这种情况下,mimeType是由文件名的扩展自动给出的。

代码语言:javascript
复制
var blob = attachment.setContentTypeFromExtension();

注意:

  • 在上面修改的脚本中,无论mimeType: MimeType.GOOGLE_SHEETSfile中,结果都是一样的。
  • 在你的问题中,你说an xlsx file from a Gmail Attachment。你说the Gmail attachment is imported to Google Apps Script as application/octet instead of application/vnd.ms-excel
    • 如果该文件是XLSX文件,则mimeType为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    • 如果fie是XLS文件,则mimeType是application/vnd.ms-excel

参考文献:

如果这不能解决你的问题,我道歉。

票数 2
EN

Stack Overflow用户

发布于 2020-03-15 16:21:10

这些

代码语言:javascript
复制
parents: [{id: folderId}],
mimeType: MimeType.GOOGLE_SHEETS

请参考输入文件。见医生来了。你应该跳过这些。

这段代码片段适用于v2:

代码语言:javascript
复制
function abc() {
  var mail = GmailApp.search("SEARCH_TERM")[0];
  var msg = mail.getMessages()[0];
  var blob = msg.getAttachments()[0];
  var file = {
    title: 'Converted Spreadsheet'
  };
  Drive.Files.insert(file, blob, {convert: true});
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60693366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档