英文:
Get attachments in GMail API
问题
我正在尝试从Golang中的邮件中获取附件。问题出在从Gmail中读取的base64负载上,给我报错:
输入字节13处的非法base64数据
这是我的代码(省略了错误处理部分)
..
attach, _ := srv.Users.Messages.Attachments.Get(user, messageid, attachmentid).Do()
decoded, err := base64.StdEncoding.DecodeString(attach.Data)
这会抛出上述错误,如果我在Gmail中查看原始消息,可以在标题之后看到这个:
begin 644 filename-of-the-attachment.extension
M'XL(`/Y;GU8``^S]R[(>R9&E"\[[*5)JVI*6;N9WS(_TD3/J0<U:>H`*;F9"...
感谢任何帮助!
谢谢
英文:
I am trying to get an attachment from a mail in golang. The problem is in the base64 payload read from Gmail giving me the error
illegal base64 data at input byte 13
Here's my code (err handling omitted)
..
attach, _ := srv.Users.Messages.Attachments.Get(user, messageid, attachmentid).Do()
decoded, err := base64.StdEncoding.DecodeString(attach.Data)
This throws the mentioned error and if I look at the original message in GMail can see after the headers this:
begin 644 filename-of-the-attachment.extension
M'XL(`/Y;GU8``^S]R[(>R9&E"\[[*5)JVI*6;N9WS(_TD3/J0<U:>H`*;F9"...
Any help appreciated
Thanks
答案1
得分: 5
问题出在base64编码上:根据文档所说,payload(无论是“full”模式还是“raw”模式)应该使用base64URL编码,而不是base64编码。
所以这段代码是有效的:
attach, _ := srv.Users.Messages.Attachments.Get(user, messageid, attachmentid).Do()
decoded, err := base64.URLEncoding.DecodeString(attach.Data)
fileout, err := os.OpenFile(....
话虽如此,我发现默认的“full”模式更容易处理
英文:
The problem is in the base64 encoding: as the documentation say the payload (either in "full" or "raw" mode) is in base64URL encoding, not base64.
So this code is working:
attach, _ := srv.Users.Messages.Attachments.Get(user, messageid, attachmentid).Do()
decoded, err := base64.URLEncoding.DecodeString(attach.Data)
fileout, err := os.OpenFile(...
That said, I saw the full mode (default) is easier to handle
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论