Ho un progetto in cui sto utilizzando un generatore di PDF per inviare un file a un utente. Vorremmo offrire all'utente la possibilità di allegare questo file a una e-mail, e abbiamo problemi a utilizzare insieme l'oggetto Stream e la logica Attachment.Stream come allegato a System.Net.Mail è 0 byte
Iniziamo con ABCpdf, che ha due metodi di salvataggio: può salvare su un flusso o, se gli dai una stringa, proverà a salvarlo su un file sul disco. Non abbiamo fatto nessun problema
Stream stream = new MemoryStream();
myPdf.Save(stream);
Tutto è per lo più fresco, a questo punto - stream
ha diversi kilobyte di dati, e se si .save() in un file, si ottiene un file vero e proprio con lo stesso numero di byte.
Così che attribuiamo a una e-mail a questo punto (dopo aver inizializzato l'oggetto di posta, l'impostazione A: e Da :, ecc):
mail.Attachments.Add(new Attachment(stream, "myPdf.pdf"));
mail.Send();
... che ci porta fino a ricevere una e-mail con 0 byte, ma il nome file corretto.
Tutti gli esempi che trovo online utilizzano StreamReader o StreamWriter o Flush() o qualcosa del genere. Sembra sempre più complicato del semplice passaggio di un flusso, ma forse solo una o due righe sono più complicate. Nessuno di questi esempi inizia con uno Stream: cercano sempre di trasformare un array in un flusso per mostrarti quanto sia facile, o prendere un file dal disco (cosa che non possiamo fare, ed è per questo che siamo eccitati usare un flusso).
In ogni caso, se qualcuno può spiegare cosa sto facendo male o cosa dovrei fare, lo apprezzerei molto. Grazie.
In caso aiuta nessuno, il mio attaccamento era di 64 byte, ma sull'apertura che ha detto il file non è valido. La soluzione di seguito ha risolto anche questo, quindi non è solo se dice 0 byte. –