0

ユーザーがさまざまなファイル (HttpPostedFile) をアップロードできるように Web サイトを取得しようとしています。これらのファイルは、BLOB として Oracle データベースに格納されます。ここに私がこれまでに持っているものがあります:

    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.AddHeader("Content-Disposition", "attachment; filename=" + fileinfo[1]);
Response.AddHeader("Content-Length", filedata.Length.ToString());
Response.ContentType = "アプリケーション/オクテット ストリーム"; Response.BinaryWrite(ファイルデータ);

どんな助けでも大歓迎です。

4

1 に答える 1

0

私が見ているサンプルコードの多くはオンライン状態です

br.BaseStream.Position = 0;

読む前に; 理由はわかりませんが、開始位置を明示的に設定する必要がある可能性はありますか?

于 2009-07-27T23:17:07.233 に答える