我试图让我的网站,允许用户上传各种文件(HttpPostedFile),然后将其存储在Oracle数据库为BLOB。下面是我到目前为止有:

    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( “内容处置”, “附件;文件名=” + FileInfo的[1]);结果         Response.AddHeader( “Content-Length的”,filedata.Length.ToString());点击         Response.ContentType =“应用/八位字节流”;         Response.BinaryWrite(FILEDATA);

任何帮助将不胜感激。

有帮助吗?

解决方案

一个很多我看到的在线状态的示例代码

br.BaseStream.Position = 0;

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top