获取 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) 示例代码:
- 有专门的附件路由(tempToken&fileName 是可选的,contentType 也可以从附件数据中导出):
..route('/attachments/:tempToken/:msgId/:attachmentId/:fileName').link(()
=> AttachmentsController(ctx))
- 控制器基本上通过 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); }
- 我们使用 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;
我正在获取 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) 示例代码:
- 有专门的附件路由(tempToken&fileName 是可选的,contentType 也可以从附件数据中导出):
..route('/attachments/:tempToken/:msgId/:attachmentId/:fileName').link(() => AttachmentsController(ctx))
- 控制器基本上通过 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); }
- 我们使用 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;