2009-02-21 13 views

Trả lời

3

Nếu bạn quan tâm đến việc sử dụng cơ sở dữ liệu để lưu trữ tệp, hãy xem this 4guysfromrolla article. Đó là định hướng web, nhưng sẽ không có vấn đề gì khi tìm kiếm những gì bạn cần.

0

Về cơ bản, bạn chỉ đang nói về lưu trữ và truy xuất BLOB (trong số image hoặc varbinary(max) dữ liệu). Xem câu hỏi này: Streaming directly to a database

3

Để đưa nó vào cơ sở dữ liệu, bạn phải đọc nó vào một mảng byte. Hoặc là đọc nó từ hệ thống tập tin hoặc sử dụng tài sản AspNetFileUploadWebControl.FileBytes. Tạo một thủ tục chèn được lưu trữ và thêm mảng byte làm tham số cho cột DB của bạn (cột phải là kiểu dữ liệu SQL "hình ảnh").

Để có được nó ra khỏi cơ sở dữ liệu, sử dụng một cái gì đó như:

theRow = getDatarowFromDatabase(); 
aByteArrayOfTheFile = (byte[])theRow["theSqlImageColumnWithTheFileInIt"]; 

Để cho phép người sử dụng để xem hoặc tải nó sử dụng phương pháp của tôi SendAsFileToBrowser():

SendAsFileToBrowser(aByteArrayOfTheFile, "application/pdf", "downloaded.pdf"); 

Mã nguồn phương pháp (có quá tải):

// Stream a binary file to the user's web browser so they can open or save it. 
    public static void SendAsFileToBrowser(byte[] File, string Type, string FileName) 
    { 
     string disp = "attachment"; 
     if (string.IsNullOrEmpty(FileName)) 
     { 
      disp = "inline"; 
     } 

     // set headers 
     var r = HttpContext.Current.Response; 
     r.ContentType = Type; // eg "image/Png" 
     r.Clear(); 
     r.AddHeader("Content-Type", "binary/octet-stream"); 
     r.AddHeader("Content-Length", File.Length.ToString()); 
     r.AddHeader("Content-Disposition", disp + "; filename=" + FileName + "; size=" + File.Length.ToString()); 
     r.Flush(); 

     // write data to requesting browser 
     r.BinaryWrite(File); 
     r.Flush(); 
    } 
    //overload 
    public static void SendAsFileToBrowser(byte[] File, string Type) 
    { 
     SendAsFileToBrowser(File, Type, ""); 
    } 
    // overload 
    public static void SendAsFileToBrowser(System.IO.Stream File, string Type, string FileName) 
    { 
     byte[] buffer = new byte[File.Length]; 
     int length = (int)File.Length; 
     File.Write(buffer, 0, length - 1); 
     SendAsFileToBrowser(buffer, FileName, Type); 
    } 

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