上传到Oracle DB之前和之后的文件不一致

我试图让我的网站允许用户上传各种文件(HttpPostedFile),然后将这些文件作为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();
        }
    }

该文件成功上传并下载 - 但是,下载的文件与上传的文件不同。 我已经验证过,内容与进出数据库的文件相同,这意味着该文件未被正确转换,或者未被客户端正确保存。 这两个文件在磁盘上大小相同,但不是根据Windows。 根据十六进制编辑器,似乎下载的文件副本在文件的最开始处缺少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);

任何帮助,将不胜感激。


我在网上看到很多示例代码

br.BaseStream.Position = 0;

读之前; 我不明白为什么,但是否有可能需要明确设置起始位置?

链接地址: http://www.djcxy.com/p/46753.html

上一篇: Inconsistency in file before and after upload to Oracle DB

下一篇: Convert HTML to PDF in .NET