我做的是附件的上传与下载,上传的时候,把附件名和内容存入sql2005的一张表里,(其中内容里显示的是<二进制数据>)。下载的时候,读取内容,把数据以流的形式输出,然后写,然后发送到客户端。源代码如下:
其中下载下来以后,文件里显示的内容就13个字节“system.byte[]” 我想应该是数据转化的时候,有问题,但是具体在哪,请各位高手指点,小弟菜鸟~~,不胜感激!!!。 string filename = drpfile.SelectedItem.Text.Trim(); //要下载的文件名
string command = @"select FileContent from Accessories where FileName = '" + filename + "' //检索文件内容,(二进制)
DataTable ds = new Farshine.GuoBan.DataAccess.SqlDirectDataAccess().GetDataTable(command);
byte[] bytes = (byte[])ds.Rows[0]["FileContent"];//读取二进制流
int ArraySize = bytes.GetUpperBound(0); //取最大维数
FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Read);
fs.Read (bytes, 0, ArraySize);
fs.Close();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8)); //fileName为需要下载的文件名
Response.Write(bytes); // 写入输入流
Response.Flush(); // 向客户端发送数据流
Response.End();
其中下载下来以后,文件里显示的内容就13个字节“system.byte[]” 我想应该是数据转化的时候,有问题,但是具体在哪,请各位高手指点,小弟菜鸟~~,不胜感激!!!。 string filename = drpfile.SelectedItem.Text.Trim(); //要下载的文件名
string command = @"select FileContent from Accessories where FileName = '" + filename + "' //检索文件内容,(二进制)
DataTable ds = new Farshine.GuoBan.DataAccess.SqlDirectDataAccess().GetDataTable(command);
byte[] bytes = (byte[])ds.Rows[0]["FileContent"];//读取二进制流
int ArraySize = bytes.GetUpperBound(0); //取最大维数
FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Read);
fs.Read (bytes, 0, ArraySize);
fs.Close();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8)); //fileName为需要下载的文件名
Response.Write(bytes); // 写入输入流
Response.Flush(); // 向客户端发送数据流
Response.End();
解决方案 »
- 怎么得网页元素的位置?
- c#中往数据库里插入数据时提示“从数据类型 varchar 转换为 numeric 时出错”。
- 未处理sqlException SqlDataReader sdr= sqlcmd.ExecuteReader();语法错误
- VS 属性编辑器问题
- C# XML 添加其他文件节点问题
- Microsoft Application Blocks for .NET能否用在access上?
- 给高手散分!
- 怎么实现clickonce 安装程序卸载后删除某个文件夹
- 怎樣設置Table格不能自動增寬
- 关于线程和队列的问题?
- trvFtpFileTree_NodeMouseDoubleClick”的重载均与委托“System.Windows.Forms.TreeViewEventHa
- C#列举ACCESS2007(ACCDB)中的表名和表结构.....
FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Read);
fs.Read (bytes, 0, ArraySize);
fs.Close();
这几句干什么的?去掉吧
byte[] bytes = (byte[])ds.Rows[0]["FileContent"];//读取二进制流
这里不是已经有值了吗?
那就是ds.Rows[0]["FileContent"]里的数据有问题了,肯定是存的时候没有存进去
string filename ="macfeeinfo.txt"; //要下载的文件名
FileStream fs = new FileStream("d:\\macfeeinfo.txt", FileMode.OpenOrCreate, FileAccess.Read);
int ArraySize = (int)fs.Length ;
byte[] bytes = new byte[ArraySize];
fs.Read (bytes, 0, ArraySize);
fs.Close();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8)); //fileName为需要下载的文件名
Response.Write(bytes); // 写入输入流
Response.Flush(); // 向客户端发送数据流
Response.End();
这是从一个文件里读数据到byte数组然后下载的代码
byte[] bytes = encoding.default.getbytes(ds.Rows[0]["FileContent"].tostring());然后在这里打断点,看看byte得到的是什么
System.Web.UI.HtmlControls.HtmlInputFile nyFile = (System.Web.UI.HtmlControls.HtmlInputFile)upFiles;
string fileName;
for (int fileCount = 0; fileCount < filecount; fileCount++)
{
//得到提交的文件 Stream fileDataStream = nyFile.PostedFile.InputStream; //构造数组 byte[] fileData = new byte[nyFile.PostedFile.ContentLength]; //把文件流填充到数组 fileDataStream.Read(fileData, 0, nyFile.PostedFile.ContentLength); //取得上传得文件名
fileName = System.IO.Path.GetFileName(nyFile.PostedFile.FileName); if (fileName != String.Empty)
{
////取得文件的扩展名
//fileExtension = System.IO.Path.GetExtension(fileName); //上传附件
//affairs.Insert(0, fileName, fileData, fileExtension, 0, CurrentUserInfo.所属单位ID.ToString(), null, txtFileRe.Text.Trim(), Session.SessionID, 0);
SQLDAL.AccessoriesDataTable tab = new SQLDAL.AccessoriesDataTable();
SQLDAL.AccessoriesRow accessoriesRow = tab.NewAccessoriesRow();
accessoriesRow.ArtNo = 0;
accessoriesRow.FileName = fileName;
accessoriesRow.FileContent = fileData;
accessoriesRow.OrgNo = CurrentUserInfo.所属单位ID.ToString();
accessoriesRow.Re = txtFileRe.Text.Trim();
accessoriesRow.SessionID = this.CurrentUserInfo.所属单位ID.ToString();// Session.SessionID.Trim();
DALService.insertAccessories(accessoriesRow);
} this.showUpAccessories();
}
this.txtFileRe.Text = "";