2009-07-27 8 views
0

私は、ユーザーがさまざまなファイル(HttpPostedFile)をアップロードできるように自分のWebサイトを作成しようとしています。これらのファイルはOracleデータベースにBLOBとして保存されます。ここで私はこれまで持っているものです: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(); 
     } 
    } 

ファイルが正常にアップロードおよびダウンロードされる - しかし、ダウンロードしたファイルは、アップロードされたファイルと同じではありません。私はすでに内容がデータベースに出入りするファイルと同じであることを確認しています。つまり、ファイルが正しく変換されていないか、クライアントによって正しく保存されていません。 2つのファイルのサイズはディスク上では同じですが、Windowsでは同じではありません。 16進エディタによれば、ダウンロードされたファイルのコピーは、ファイルの最初の部分で3バイト欠けているようです。

ここでは、ファイルをクライアントに転送するために使用しているものを示します。 Response.Clear(); Response.AddHeader( "Content-Disposition"、 "attachment; filename =" + fileinfo [1]);
Response.AddHeader( "Content-Length"、filedata.Length.ToString());
Response.ContentType = "application/octet-stream"; Response.BinaryWrite(filedata);

ご協力いただければ幸いです。

答えて

0

サンプルコード、私は見ていますたくさんのオンライン状態を読み込む前に

br.BaseStream.Position = 0; 

。理由は分かりませんが、開始位置を明示的に設定する必要がありますか?

+0

ありがとうございました。 BinaryReaderがデフォルトのインデックス0でストリームをキャプチャしないことは、私にとってはむしろ奇妙に思えますが、今は動作していますが、あまりにもそれほど疑問を呈さないでしょう。 –

関連する問題