Gmail API错误:请求有效内容大小超出限制:1048576字节

时间:2016-12-08 10:41:41

标签: android gmail-api

我一直在我的应用中使用Gmail API,它一直很好,直到昨天,现在我正在

<ComboBox x:Name="cbDetails" 
          ItemsSource="{Binding MyDetails}" 
          DisplayMemberPath="Name" 
          SelectedValuePath="Name" 
          SelectedValue="{Binding MyDetail}"/>

我正在使用multipart来附加文件,这是代码的片段

V/Error: 400 Bad Request
 {
   "code" : 400,
   "errors" : [ {
     "domain" : "global",
     "message" : "Request payload size exceeds the limit: 1048576 bytes.",
     "reason" : "badRequest"
   } ],
   "message" : "Request payload size exceeds the limit: 1048576 bytes.",
   "status" : "INVALID_ARGUMENT"
 }

几天前工作完全正常,现在每当我尝试发送大于1 MB的文件时,我都会收到上述错误,可以解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:0)

您可以通过以下任何方式进行上传请求。使用uploadType请求参数指定您使用的方法。

简单上传: uploadType = media 。用于快速传输较小的文件,例如5 MB或更少。

分段上传: uploadType = multipart 。用于快速传输较小的文件和元数据;在一个请求中传输文件以及描述它的元数据。

可恢复上传: uploadType = resumable 。对于可靠的传输,对于较大的文件尤为重要。使用此方法,您可以使用会话启动请求,该请求可以选择包含元数据。这是一种适用于大多数应用程序的好策略,因为它也适用于较小的文件,每次上传一个额外的HTTP请求。 由于您要发送数据&gt; 5 MB,使用multipart或resumable选项。

public static MimeMessage createEmailWithAttachment(String to,
                                                        String from,
                                                        String subject,
                                                        String bodyText,
                                                        File file) throws MessagingException, IOException {
        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        MimeMessage email = new MimeMessage(session);

        email.setFrom(new InternetAddress(from));
        email.addRecipient(javax.mail.Message.RecipientType.TO,
                new InternetAddress(to));
        email.setSubject(subject);

        MimeBodyPart mimeBodyPart = new MimeBodyPart();
        mimeBodyPart.setContent(bodyText, "text/plain");

        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(mimeBodyPart);

        mimeBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(file);

        mimeBodyPart.setDataHandler(new DataHandler(source));
        mimeBodyPart.setFileName(file.getName());

        multipart.addBodyPart(mimeBodyPart);
        email.setContent(multipart);

        return email;
    }

查看文档以获取更多信息:https://developers.google.com/gmail/api/guides/uploads

答案 1 :(得分:0)

我有同样的问题。在我的情况下,我无法创建大于1 MB的草稿,尽管Gmail文档声明限制为35 MB。

经过一些测试后,我发现该问题是针对Gmail API的.NET客户端库的特定错误。我的解决方法是编写自己的代码来调用Gmail API,绕过.NET客户端库。我已在此处发布了我的解决方案:http://www.gmass.co/blog/call-the-gmail-api-in-net-without-using-client-library/