Я хочу извлечь как текст, так и файлы из данных формы запроса, чтобы прикрепить их к моему черновику письма.На стороне клиента я использую FormData
, чтобы содержать файлы и текстовое тело для отправки на сервер.В коде сервера я использую MultipartMemoryStreamProvider
для извлечения файлов из Contents
и прикрепления к черновому тексту, но я не знаю, как извлечь из него текст.Я собираюсь перейти на MultipartFormDataStreamProvider
, который имеет свойства FileData
и FormData
, но я не знаю, что заполнить RootPath
.
Есть ли способдля меня, чтобы извлечь файлы и текст из данных составной формы и создать черновик почты с файлами или текстом без необходимости писать разные функции создания черновика для каждого случая?
Вот функция создания черновика на сервере:
[HttpPost]
[Route("createDraft")]
[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
public async Task<IHttpActionResult> CreateDraft(CancellationToken cancellationToken)
{
var service = await GoogleApis.GetGmailService(this, cancellationToken);
if (service == null)
{
return BadRequest("Haven't signed in google apis.");
}
MailMessage mailMessage = new MailMessage();
Draft draft = new Draft();
try
{
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
// extracting files
foreach (var file in provider.Contents)
{
Attachment attachedFile = new Attachment(await file.ReadAsStreamAsync(), file.Headers.ContentDisposition.FileName);
mailMessage.Attachments.Add(attachedFile);
}
mailMessage.Body = "abc" // <-- fill extracted text here
MimeMessage mimeMessage = MimeMessage.CreateFromMailMessage(mailMessage);
Message message = new Message
{
Raw = Encode(mimeMessage.ToString())
};
draft.Message = message;
var newDraft = service.Users.Drafts.Create(draft, "me").Execute();
return Ok(provider.Contents);
}
catch (Exception e)
{
return BadRequest(e.Message);
}
}
Создать черновую функцию на клиенте:
createDraft() {
var fd = new FormData();
for (let i = 0; i < this.selectedFiles.length; i++) {
var f = this.selectedFiles[i];
fd.append("files", f, f.name);
}
fd.set('body', this.htmlBody); // <-- draft body
// htmlBody: text from input field
if (this.recipientsTo.length > 0) {
this.isLoadingResults = true;
this.mailService.createDraft(fd).subscribe(result => {
this.isLoadingResults = false;
this.dialogRef.close();
}, error => {
console.error(error);
});
}
else {
this.isLoadingResults = false;
this.dialogRef.close();
}
}
Почта создать черновой сервис:
createDraft(draftBody) {
return this.http.post('/api/emails/createDraft', draftBody);
}