如何在浏览器中下载附件?

时间:2014-11-24 21:02:35

标签: gmail-api

我在浏览器中使用Gmail API,并希望允许用户下载电子邮件附件。我看到https://developers.google.com/gmail/api/v1/reference/users/messages/attachments/get但它返回JSON和base64数据。我不认为我可以在内存中获取该数据然后触发“下载”以在本地保存文件。即使我可以认为它不会有效 - 它可能会将文件下载到内存中,而不是将其传输到文件中。我想我需要一个直接链接到一个文件,该文件返回正确的文件名和原始二进制数据(不是base64)。有没有办法做到这一点?现在,我看到的唯一方法是代理请求。

1 个答案:

答案 0 :(得分:0)

您可以从base64获取数据并将其保存到本地文件中。

如果您使用Java获取附件,则可以使用FileOutputStream(or f.write() in Python)将字节写入文件,并使用路径将其保存在本地。

您可以尝试使用Google Developer页面中的以下示例代码:

public static void getAttachments(Gmail service, String userId, String messageId)
      throws IOException {
    Message message = service.users().messages().get(userId, messageId).execute();
    List<MessagePart> parts = message.getPayload().getParts();
    for (MessagePart part : parts) {
      if (part.getFilename() != null && part.getFilename().length() > 0) {
        String filename = part.getFilename();
        String attId = part.getBody().getAttachmentId();
        MessagePartBody attachPart = service.users().messages().attachment().
            get(userId, messageId, attId).execute();
        byte[] fileByteArray = Base64.decodeBase64(attachPart.getData());
        FileOutputStream fileOutFile =
            new FileOutputStream("directory_to_store_attachments" + filename);
        fileOutFile.write(fileByteArray);
        fileOutFile.close();
      }
    }
  }