asp.net 我从数据库中(不是文件夹)下载文件,下载后内容为System.Byte[],求帮助代码如下:
SqlCommand mySelect = new SqlCommand("select * FROM files where id = 1", sqlConn);
SqlDataReader reader;
reader = mySelect.ExecuteReader();
if (reader.Read())
{
string sFileName = reader["FileName"].ToString();
String length = reader["FileSize"].ToString();
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentEncoding = Encoding.Default;
Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(sFileName, System.Text.Encoding.UTF8).Replace("+", ""));
Response.AppendHeader("Content-Length", length);
Response.ContentType = "application/octet-stream";
byte[] bt = (Byte[])reader["FileData"];
Response.OutputStream.Write(bt, 0, bt.Length);
Response.Flush();
Response.OutputStream.Close();
Response.End();
}
SqlCommand mySelect = new SqlCommand("select * FROM files where id = 1", sqlConn);
SqlDataReader reader;
reader = mySelect.ExecuteReader();
if (reader.Read())
{
string sFileName = reader["FileName"].ToString();
String length = reader["FileSize"].ToString();
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentEncoding = Encoding.Default;
Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(sFileName, System.Text.Encoding.UTF8).Replace("+", ""));
Response.AppendHeader("Content-Length", length);
Response.ContentType = "application/octet-stream";
byte[] bt = (Byte[])reader["FileData"];
Response.OutputStream.Write(bt, 0, bt.Length);
Response.Flush();
Response.OutputStream.Close();
Response.End();
}
解决方案 »
- DateTime和string 格式之间的转换问题
- js实现行表格行高亮显示
- 母版页的使用
- 能否保证满足条件的用户都执行完该执行的函数,再Dr.delete() 呢
- 请教,如何改变Datagrid中自动生成的列的headertext,以及列的模式,比如改变成超级链接列
- 请问怎样向DataTable中添加一条string型记录
- 关于.net一直有个问题想问一下
- 服务器,一秒被访问几千次!
- 关于DataGrid的EditCommand 3 个问题请教高手
- 我想打印webform中的datagrid,怎么办??!!!!!!!!!
- 远程服务器返回错误: (400) 错误的请求。
- asp.net 如何绘制 分支图
---------------------
应该就是这个转换出错了。
{
System.IO.Stream iStream = null;
byte[] buffer = new Byte[10000];
int length;
long dataToRead;
//获取资源的编号
string id = Request["id"].ToString();
NRBLL.File bf = new Asiastar.NRBLL.File();
Guid guid = new Guid(id);
//获取资源完整路径
if (bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FilePath"] != null)
{
//filepath 存的是完整路径
string filepath = bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FilePath"].ToString();
string filename = System.IO.Path.GetFileName(filepath); try
{
string fileName = HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(filename));
filename = filename.Replace("+", "%20"); //将“+”替换成“空格”
iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
dataToRead = iStream.Length;
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
while (dataToRead > 0)
{
if (Response.IsClientConnected)
{
length = iStream.Read(buffer, 0, 10000);
Response.OutputStream.Write(buffer, 0, length); Response.Flush();
buffer = new Byte[10000];
dataToRead = dataToRead - length;
}
else
{
dataToRead = -1;
}
}
}
catch (Exception)
{
Response.Write("文件下载时出现错误!");
}
finally
{
if (iStream != null)
{
iStream.Close();
}
}
}
else
{
Page.RegisterStartupScript("提示", "<script type='javascript'>alert('文件不存在!')</script>");
}
}
public bool DownLoadFile(string localPath, string hostURL, int byteCount, string userID, long cruuent)
{
bool result = true;
string tmpURL = hostURL;
byteCount = byteCount * 1024;
hostURL = tmpURL + "&npos=" + cruuent.ToString();
System.IO.FileStream fs;
fs = new FileStream(localPath, FileMode.OpenOrCreate);
if (cruuent > 0)
{
//偏移指针
fs.Seek(cruuent, System.IO.SeekOrigin.Current);
}
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(hostURL);
if (cruuent > 0)
{
request.AddRange(Convert.ToInt32(cruuent)); //设置Range值
} try
{
//向服务器请求,获得服务器回应数据流
System.IO.Stream ns = request.GetResponse().GetResponseStream(); byte[] nbytes = new byte[byteCount];
int nReadSize = 0;
nReadSize = ns.Read(nbytes, 0, byteCount);
while (nReadSize > 0)
{
fs.Write(nbytes, 0, nReadSize);
nReadSize = ns.Read(nbytes, 0, byteCount);
}
fs.Close();
ns.Close();
}
catch(Exception ex)
{
LOG.Error("下载" + localPath + "的时候失败!" + "原因是:" + ex.Message);
fs.Close();
result = false;
}
return result;
}
#endregion