如何上传作为application / octet-stream发送到Google驱动器

时间:2018-05-29 11:39:42

标签: google-apps-script

我收到包含excel文件作为附件的夜间电子邮件,但发送公司没有定义内容类型,因此文件以内容类型= application / octet-stream

到达

我的脚本正在尝试将文件作为Google表格上传到我的Google驱动器,但上传失败,因为脚本不知道它是什么类型的文件。

我尝试转发附件并为其提供正确的内容类型,但转发的文件也以八位字节流的形式到达。

我能做些什么来克服这个问题?

我使用的代码的要点如下:

var ureadMsgsCount = GmailApp.getInboxUnreadCount();
if (ureadMsgsCount > 0) {

var threads = GmailApp.search("Excel Files")
for (var i = 0; i < threads.length; i++) {
  if (threads[i].isInInbox()) {

    messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {

      if (messages[j].isUnread()) {

        var attachments = messages[j].getAttachments();
        for (var k = 0; k < attachments.length; k++) {

          // Is the attachment an excel file
          var excelFile = attachments[k];
          var fileName = attachments[k].getName();
          var contentType = attachments[k].getContentType();

          if (fileName.indexOf("xls") > -1) {
            var folderId = getFolderID('saved files');
            var resource = {
              title: fileName.replace(/.xls?/, ""),
              mimeType: 'application/vnd.google-apps.spreadsheet',
              parents: [{ id: folderId }]
            };
            Drive.Files.insert(resource, excelFile);
          }
         }
        }
      }
    }
  }
}
非常感谢。

引发的错误是“GoogleJsonResponseException:提供的mime类型无效”

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的其他人,我可以使用GmailApp类中的 setContentTypeFromExtension()方法解决此问题。

只需替换

var excelFile = attachments[k];
var fileName = attachments[k].getName();
var contentType = attachments[k].getContentType();

var excelFile = attachments[k].setContentTypeFromExtension();
var fileName = attachments[k].getName();
var contentType = excelFile.getContentType();

这当然可以用更少的行编写,但在调试中运行时使用单独的值会很方便。