У меня есть проект, в котором я использую генератор PDF для отправки файла пользователю. Мы хотели бы дать пользователю возможность прикрепить этот файл к электронному письму, и у нас возникли проблемы при совместном использовании объекта Stream и логики вложений.
Мы начнем с ABCpdf, который имеет два метода сохранения: он может сохранить в поток или, если вы дадите ему строку, он попытается сохранить в файл на диске. Мы сделали оба без проблем.
Stream stream = new MemoryStream();
myPdf.Save(stream);
На данный момент все в основном круто - stream
имеет несколько килобайт данных, и если вы сохраните () в файл, вы получите реальный файл с тем же числом байтов.
Таким образом, мы прикрепляем письмо к этому моменту (после инициализации почтового объекта, установив To: и From: и т. Д.):
mail.Attachments.Add(new Attachment(stream, "myPdf.pdf"));
mail.Send();
... что позволяет нам получить электронное письмо с 0 байтами, но с правильным именем файла.
Все примеры, которые я нахожу в Интернете, используют StreamReader или StreamWriter или Flush () или что-то в этом роде. Всегда кажется, что это сложнее, чем просто пропустить поток, но может быть, только одна или две строки сложнее. Ни один из этих примеров не начинается с Stream - они всегда пытаются превратить массив в Stream, чтобы показать вам, насколько это просто, или захватить файл с диска (что мы не можем сделать, поэтому мы взволнованы использовать поток).
В любом случае, если кто-нибудь сможет объяснить, что я делаю неправильно или что мне следует делать, я был бы очень признателен. Спасибо.