我正在尝试让我的网站允许用户上传各种文件(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);
任何帮助将不胜感激。
答案 0 :(得分:0)
我在网上看到很多示例代码
br.BaseStream.Position = 0;
阅读前;我不明白为什么,但是你可能需要明确设置起始位置吗?