获取附件并保存在s3 bucket mailkit imap
Get attachment and save in s3 bucket mailkit imap
我需要获取电子邮件中的附件进行保存,我会根据需要完成阅读电子邮件和保存的整个过程,但是当我尝试获取要保存在 AWS S3 存储桶中的附件时它在尝试读取内容类型时出错。
基本上我需要做的是。
- 获取附件。
- 为我的S3 保存功能创建一个FormFile 来保存附件(S3 保存功能已经可用)。
我在构建 FormFile 时遇到问题。
.
.
.
var attachmentsToS3 = new FormFileCollection();
foreach (var attachment in message.Attachments)
{
var part = attachment as MimePart;
var stream = new MemoryStream();
await part.Content.DecodeToAsync(stream);
var fileLength = stream.Length;
var formFile = new FormFile(stream, 0, fileLength, "file[]", attachment.ContentDisposition.FileName);
attachmentsToS3.Add(formFile);
}
await _atendimentoServices.SaveAnexoAtendimentoToS3( attachmentsToS3, idAcompanhamento, requestApi);
.
.
.
更新
根据布鲁诺的回答所做的更改,现在可以正常使用了。
var attachmentsToS3 = new FormFileCollection();
foreach (MimeEntity attachment in message.Attachments)
{
var memory = new MemoryStream();
if (attachment is MimePart part)
await part.Content.DecodeToAsync(memory);
else
await ((MessagePart)attachment).Message.WriteToAsync(memory);
var bytes = memory.ToArray();
var contentType = MimeTypes.GetMimeType(attachment.ContentType.MimeType);
var formFile = new FormFile(memory, 0, bytes.Length, "file[]", attachment.ContentDisposition.FileName)
{
Headers = new HeaderDictionary(),
ContentType = contentType
};
attachmentsToS3.Add(formFile);
}
await _atendimentoServices.SaveAnexoAtendimentoToS3(attachmentsToS3, idAcompanhamento, requestApi);```
下午好,Gabriel,在分析您的代码时,我发现缺少部分代码。
首先你需要这样评价你的依恋:
if (attachment is MimePart part) await part.Content.DecodeToAsync(memory);
else await ((MessagePart)attachment).Message.WriteToAsync(memory);
这样你就可以保证你的流将被正确填充为 mimeType 或不是。
缺少的另一部分是 header 和 FormFile 构造函数中的内容类型,试试看。
var formFile = new FormFile(memory, 0, bytes.Length, "file[]", attachment.ContentDisposition.FileName)
{
Headers = new HeaderDictionary(),
ContentType = MimeTypes.GetMimeType(attachment.ContentType.MimeType);
};
我需要获取电子邮件中的附件进行保存,我会根据需要完成阅读电子邮件和保存的整个过程,但是当我尝试获取要保存在 AWS S3 存储桶中的附件时它在尝试读取内容类型时出错。 基本上我需要做的是。
- 获取附件。
- 为我的S3 保存功能创建一个FormFile 来保存附件(S3 保存功能已经可用)。 我在构建 FormFile 时遇到问题。
.
.
.
var attachmentsToS3 = new FormFileCollection();
foreach (var attachment in message.Attachments)
{
var part = attachment as MimePart;
var stream = new MemoryStream();
await part.Content.DecodeToAsync(stream);
var fileLength = stream.Length;
var formFile = new FormFile(stream, 0, fileLength, "file[]", attachment.ContentDisposition.FileName);
attachmentsToS3.Add(formFile);
}
await _atendimentoServices.SaveAnexoAtendimentoToS3( attachmentsToS3, idAcompanhamento, requestApi);
.
.
.
更新
根据布鲁诺的回答所做的更改,现在可以正常使用了。
var attachmentsToS3 = new FormFileCollection();
foreach (MimeEntity attachment in message.Attachments)
{
var memory = new MemoryStream();
if (attachment is MimePart part)
await part.Content.DecodeToAsync(memory);
else
await ((MessagePart)attachment).Message.WriteToAsync(memory);
var bytes = memory.ToArray();
var contentType = MimeTypes.GetMimeType(attachment.ContentType.MimeType);
var formFile = new FormFile(memory, 0, bytes.Length, "file[]", attachment.ContentDisposition.FileName)
{
Headers = new HeaderDictionary(),
ContentType = contentType
};
attachmentsToS3.Add(formFile);
}
await _atendimentoServices.SaveAnexoAtendimentoToS3(attachmentsToS3, idAcompanhamento, requestApi);```
下午好,Gabriel,在分析您的代码时,我发现缺少部分代码。
首先你需要这样评价你的依恋:
if (attachment is MimePart part) await part.Content.DecodeToAsync(memory);
else await ((MessagePart)attachment).Message.WriteToAsync(memory);
这样你就可以保证你的流将被正确填充为 mimeType 或不是。
缺少的另一部分是 header 和 FormFile 构造函数中的内容类型,试试看。
var formFile = new FormFile(memory, 0, bytes.Length, "file[]", attachment.ContentDisposition.FileName)
{
Headers = new HeaderDictionary(),
ContentType = MimeTypes.GetMimeType(attachment.ContentType.MimeType);
};