2009-07-27 6 views
0

Ich versuche, meine Website zu ermöglichen, dass Benutzer verschiedene Dateien hochladen (HttpPostedFile), die dann in einer Oracle-Datenbank als BLOBs gespeichert werden. Hier ist, was ich bisher habe:Inkonsistenz in der Datei vor und nach dem Upload auf Oracle DB

public static bool insertFile(int pid, HttpPostedFile file, string filedesc) 
    { 
     string filename = file.FileName.Remove(0, file.FileName.LastIndexOf("\\") + 1); 
     byte[] filebytearray = new byte[file.ContentLength]; 
     BinaryReader br = new BinaryReader(file.InputStream); 
     filebytearray = br.ReadBytes(file.ContentLength); 

     if (filedesc == string.Empty) 
     { 
      filedesc = "No description."; 
     } 
     OracleConnection conn = new OracleConnection(connectionString); 
     OracleCommand cmd = new OracleCommand("database", conn); 
     cmd.BindByName = true; 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add(new OracleParameter("pfiledata", OracleDbType.Blob)).Value = filebytearray; 
     try 
     { 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
      return true; 
     } 
     catch (Exception ex) 
     { 
      Errors.WriteToEventLog("File insert", ex); 
      return false; 
     } 
     finally 
     { 
      conn.Dispose(); 
      cmd.Dispose(); 
      file.InputStream.Dispose(); 
     } 
    } 

Die Datei erfolgreich hochgeladen wird und heruntergeladen - aber die heruntergeladene Datei nicht das gleiche wie die hochgeladene Datei ist. Ich habe bereits verifiziert, dass der Inhalt mit der Datei identisch ist, mit der er in die Datenbank ein- und ausgeht, was bedeutet, dass die Datei entweder nicht korrekt konvertiert wird oder nicht korrekt vom Client gespeichert wird. Die beiden Dateien sind auf der Festplatte identisch, jedoch nicht nach Windows. Es scheint, dass die heruntergeladene Kopie der Datei 3 Bytes am Anfang der Datei, gemäß Hex-Editor, fehlt.

Hier ist, was ich verwende, um die Datei an den Client zu übertragen: Response.Clear(); Response.AddHeader ("Content-Disposition", "Anhang; Dateiname =" + Fileinfo [1]);
Response.AddHeader ("Inhaltslänge", filedata.Length.ToString());
Response.ContentType = "application/octet-stream"; Response.BinaryWrite (filedata);

Jede Hilfe wäre willkommen.

Antwort

0

Ein großer Teil der Codebeispiel I Online-Staaten

br.BaseStream.Position = 0; 

vor dem Lesen sehe; Ich verstehe nicht warum, aber ist es möglich, dass Sie die Startposition explizit festlegen müssen?

+0

Danke, das hat funktioniert. Es scheint mir ziemlich merkwürdig, dass BinaryReader den Stream nicht mit dem Index 0 als Standard erfassen würde, aber jetzt, wo es funktioniert, werde ich es nicht zu sehr in Frage stellen. –