私は、ユーザーがさまざまなファイル(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);
ご協力いただければ幸いです。
ありがとうございました。 BinaryReaderがデフォルトのインデックス0でストリームをキャプチャしないことは、私にとってはむしろ奇妙に思えますが、今は動作していますが、あまりにもそれほど疑問を呈さないでしょう。 –