获取 gmail 附件的下载 URL?

Get gmail attachment's downloading URL?

我正在获取 Gmail Attachment through Gmail API using the get_user_message_attachment method ,但它发送的数据是 Base64 编码形式。我想获取附件的可下载 URL,我可以将其存储并发送到我的应用程序的前端。是否可以通过某种方式获取附件的URL?我不想将 Base64 字符串转换为我服务器上的文件,然后将其上传到某处并将上传的 link 发送到前端。

@gmail_service = Google::Apis::GmailV1::GmailService.new
#authorization stuff is done and then I fetch the attachment which is received as a Google::Apis::GmailV1::MessagePartBody response
resp = @gmail_service.get_user_message_attachment("myemail@google.com", message_id, attachment_id)
# resp.data contains the base64 encoded string

我希望附件可下载URL,这样我就不必手动进行文件转换和上传。

message.get method returns a Message object

此对象包含 base64 编码的消息正文。

如果您想要可下载的 url,我建议您将 Base64 字符串转换为服务器上的文件,然后将其上传到某处并将上传的 link 发送到 front-end .

没有其他选项这是数据 API returns.

您可能需要考虑在您的服务器上为您的前端提供一个代理端点。然后给你的前端一个 link 到这个带有 messageId 的端点,并让你的服务器下载 Gmail 消息并将其流式传输到你的客户端。

这是 Aqueduct(Dart) 示例代码:

  1. 有专门的附件路由(tempToken&fileName 是可选的,contentType 也可以从附件数据中导出):

..route('/attachments/:tempToken/:msgId/:attachmentId/:fileName').link(() => AttachmentsController(ctx))

  1. 控制器基本上通过 msgId&attachmentId 加载附件并将其内容提供给客户端:
@Operation.get('tempToken', 'msgId', 'attachmentId', 'fileName') Future<Response> getAttachment(
  @Bind.path('tempToken') String tempToken, //
  @Bind.path('msgId') int msgId,
  @Bind.path('attachmentId') String attachmentId,
  @Bind.query('contentType') String contentType) async {

...

final attachment = await mailbox.readAttachment(messageId,attachmentId);

return Response.ok(attachment)
  ..encodeBody = false
  ..contentType = ContentType.parse(contentType);   }
  1. 我们使用 Google 提供的 Gmail API 库。这是 mailbox.readAttachment:
@override
Future<List<int>> readAttachment(String messageId, String attachmentId) async => (await _gmail.users.messages.attachments.get('me', messageId, attachmentId)).dataAsBytes;