OracleのDBへのアップロードの前と後のファイルで矛盾
-
19-09-2019 - |
質問
私は、ユーザーがその後、BLOBとしてOracleデータベースに格納されている各種ファイル(HttpPostedFile)を、アップロードできるようにするために私のウェブサイトを取得しようとしています。ここで私はこれまで持っているものです。
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に応じません。バイナリエディタに応じて、ファイルのダウンロードコピーはファイルの先頭に3つのバイトが欠落していることが表示されます。
ここで私は、クライアントにファイルを転送するために使用しているものです。
Response.Clear();
Response.AddHeader( "コンテンツの廃棄"、 "添付ファイル;ファイル名=" +のFileInfo [1]);
Response.AddHeader( "のContent-Length"、filedata.Length.ToString());
Response.ContentTypeの=「アプリケーション/オクテットストリーム」。
Response.BinaryWrite(FILEDATA);
任意の助けいただければ幸いです。
解決
サンプルコードの多くは、私がオンライン状態を見ています。
br.BaseStream.Position = 0;
読み込む前に、私はなぜ表示されていないが、それはあなたが明示的に開始位置を設定する必要があること可能ですか?