2010-07-07 40 views
10

Tôi có mảng byte mà về cơ bản là một tệp .docx được mã hóa được truy xuất từ ​​DB. Tôi cố gắng chuyển đổi byte này [] thành tệp gốc của nó và biến nó thành tệp đính kèm vào thư mà không phải lưu trữ tệp đó trước tiên dưới dạng tệp trên đĩa. Cách tốt nhất để giải quyết vấn đề này là gì?Cách chuyển đổi mảng byte thành tệp đính kèm thư

public MailMessage ComposeMail(string mailFrom, string mailTo, string copyTo, byte[] docFile) 
{ 
    var mail = new MailMessage(); 

    mail.From = new MailAddress(mailFrom); 

    mail.To.Add(new MailAddress(mailTo)); 
    mail.Body = "mail with attachment"; 

    System.Net.Mail.Attachment attachment; 

    //Attach the byte array as .docx file without having to store it first as a file on disk? 
    attachment = new System.Net.Mail.Attachment("docFile"); 
    mail.Attachments.Add(attachment); 

    return mail; 
} 

Trả lời

16

Có một số overload of the constructor của Attachment có luồng. Bạn có thể vượt qua trong các tập tin trực tiếp bằng cách xây dựng một MemoryStream sử dụng byte[]:

MemoryStream stream = new MemoryStream(docFile); 
Attachment attachment = new Attachment(stream, "document.docx"); 

Đối số thứ hai là tên của tập tin, từ đó các mime-type sẽ được suy ra. Hãy nhớ gọi số Dispose() trên MemoryStream sau khi bạn đã hoàn tất.

Các vấn đề liên quan