2009-02-21 60 views

Respuesta

3

Si está interesado en usar la base de datos para el almacenamiento de archivos, mire this 4guysfromrolla article. Está orientado a la web, pero no debería haber ningún problema para encontrar lo que necesita.

0

Básicamente, usted solo está hablando de almacenamiento y recuperación de BLOB (de image o datos de varbinary(max)). Consulte esta pregunta: Streaming directly to a database

3

Para ponerlo en la base de datos debe leerlo en una matriz de bytes. Puede leerlo desde el sistema de archivos o usar la propiedad AspNetFileUploadWebControl.FileBytes. Cree un procedimiento insert insertado y agregue la matriz de bytes como el parámetro para su columna DB (la columna debe ser del tipo de datos SQL "image").

para sacarlo de la base de datos, utilice algo como:

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

Para permitir al usuario ver o descargar que usar mi método SendAsFileToBrowser():

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

El código fuente de el método (con sobrecargas):

// 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); 
    } 

Cuestiones relacionadas