用C#在网页上实现文件下载,多种方法均不成功,求解!谢谢

「已注销」 2013-09-13 03:05:10
DownFiletbl.Rows[e.NewEditIndex].Cells[9].Text为文件路径;
具体代码如下:
1、第1种方法:
string fileRpath = DownFiletbl.Rows[e.NewEditIndex].Cells[9].Text;
Response.ClearHeaders();
Response.Clear();
Response.Expires = 0;
Response.Buffer = true;
Response.AddHeader("Accept-Language", "zh-tw");
string name = System.IO.Path.GetFileName(fileRpath);
System.IO.FileStream files = new FileStream(fileRpath, FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] byteFile = null;
if (files.Length == 0)
{
byteFile = new byte[1];
}
else
{
byteFile = new byte[files.Length];
}
files.Read(byteFile, 0, (int)byteFile.Length);
files.Close();

Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name, System.Text.Encoding.UTF8));
Response.ContentType = "application/octet-stream;charset=gbk";
Response.BinaryWrite(byteFile);
Response.End();

2、第2种方法:
string path = DownFiletbl.Rows[e.NewEditIndex].Cells[9].Text;

var vPos = path.IndexOf("\\files");
path = path.Substring(vPos + 1, path.Length - vPos - 1);

string fileName = "aaaa.txt";//客户端保存的文件名
string filePath = Server.MapPath(path);//路径

try
{
//以字符流的形式下载文件
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.Close();
//Response.End();
}
catch (Exception ex)
{
Response.Write("无法下载文件:" + fileName + ",由于:" + ex.Message + "");
}
3、第3种方法:
string path = DownFiletbl.Rows[e.NewEditIndex].Cells[9].Text;
var vPos = path.IndexOf("\\files");
path = path.Substring(vPos + 1, path.Length - vPos - 1);

string fileName = "f:\\asd.txt";//客户端保存的文件名
string filePath = Server.MapPath(path);//路径

FileInfo fileInfo = new FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();

4、第4种方法:
string path = DownFiletbl.Rows[e.NewEditIndex].Cells[9].Text;
var vPos = path.IndexOf("\\files");
path = path.Substring(vPos + 1, path.Length - vPos - 1);

Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
string filename = Server.MapPath(path);
Response.TransmitFile(filename);

5、第5种方法:
string path = DownFiletbl.Rows[e.NewEditIndex].Cells[9].Text;

var vPos = path.IndexOf("\\files");
path = path.Substring(vPos + 1, path.Length - vPos - 1);

string fileName = HttpContext.Current.Server.UrlEncode(path.Substring(path.LastIndexOf("//") + 1));
try
{
FileInfo info = new FileInfo(HttpContext.Current.Server.MapPath(path));
long fileSize = info.Length;
Response.Clear();
Response.ContentType = "application/x-zip-compressed";
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
//不指明Content-Length用Flush的话不会显示下载进度
Response.AddHeader("Content-Length", fileSize.ToString());
Response.TransmitFile(path, 0, fileSize);
Response.Flush();
Response.Close();
}
catch (Exception ex)
{
Response.Write("无法下载文件:" + fileName + ",由于:" + ex.Message + "");
}

6、第6种方法:
string fileName = "C:\\asd.txt";//客户端保存的文件名
string fileNameEx = DownFiletbl.Rows[e.NewEditIndex].Cells[9].Text;

var vPos = fileNameEx.IndexOf("\\files");
fileNameEx = fileNameEx.Substring(vPos + 1, fileNameEx.Length - vPos - 1);

string filePath = Server.MapPath(fileNameEx);//路径
FileInfo fileInfo = new FileInfo(filePath);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();

6种方法大同小异,但是试了都不成功,求大虾指点,谢谢!
...全文
311 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2013-09-15
  • 打赏
  • 举报
回复
可能是我的网页哪里设置不对
游戏人间 2013-09-13
  • 打赏
  • 举报
回复
下载是不能try catch的,否则会报错. 你可以新建一个页面把一个文件路径传进去看看效果.
「已注销」 2013-09-13
  • 打赏
  • 举报
回复
谢谢,我用了,还是不行,我加了try catch 提示: 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。 是不是需要在网页中设置什么啊?非常感谢,第一次做网页程序
游戏人间 2013-09-13
  • 打赏
  • 举报
回复
我经常用的一个方法你直接调就好了,传一个文件名(全路径)


    protected void DownLoad(string filePath)
    {

        int intStart = filePath.LastIndexOf("\\") + 1;
        string saveFileName = filePath.Substring(intStart, filePath.Length - intStart);
        Response.Clear();
        Response.Buffer = true;
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + saveFileName);
        Response.WriteFile(filePath);
        Response.Flush();
        Response.Close();
        Response.End();
    }
「已注销」 2013-09-13
  • 打赏
  • 举报
回复
来个高手帮帮忙啊

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧