Я думаю, что вы, вероятно, хотите узнать об использовании потоков в .Net?Сначала используйте Stream, а не string:
public class SendMailRequest
{
public Stream FileContent { get; set; }
public string FileName { get; set; }
}
Затем, потому что это очень запутанно, переименуйте ваш reader
в writer
.
Тогда, не делайте ничего странного с вашим StreamПросто сделайте:
await mailModel.filecontent.CopyToAsync(writer);
Здесь есть осложнение.В этом коде предполагается, что исходный загруженный файловый поток все еще присутствует и работает в памяти во время попытки отправки электронной почты.Правда ли это, зависит от того, что происходит между ними.
Особенно, если обработка запроса Http завершена и ответ был возвращен до того, как электронное письмо было отправлено, поток файлового содержимого, вероятно, уже исчез.Имеет более безопасный способ сделать копию прямо в контроллере:
file.InputStream.CopyToASync(mailModel.filecontent)
, но на данный момент я должен сказать, что я бы предпочел либо (1) копировать прямо в файл, либо (2) копироватьв MemoryStream.то есть
mailModel.filecontent= new MemoryStream();
file.InputStream.CopyToASync(mailModel.filecontent)
(Если вы используете MemoryStream, вы должны рассчитать, какой самый большой файл вы хотите обработать, и убедиться, что большие файлы отклонены, прежде чем создавать поток памяти).
Наконец, если это заполняет ваш файл Base64 вместо двоичного файла, посмотрите на ответы на этот вопрос: Файлы HttpRequest пустые при публикации через HttpClient