C#如何实现 文件 下载 功能??
答案:4 悬赏:10
解决时间 2021-04-08 03:30
- 提问者网友:低唤何为爱
- 2021-04-07 13:22
我在开发网站中,写了一个上传附件的功能,文件保存到目录下,路径保存到数据库中,上传现在是写完了,但是下载的时候有一些小问题。当前我写的下载功能之直接把 上传的附件对应的物理路径 作为链接添加到了“下载”链接上,这样点击“下载”有些类型的文件能自动下载,如 .rar格式的文件,但是例如.jpg、.txt、.mp3等格式的文件就不能自动下载,而是在线给打开了,这样就体现不了下载的功能了,但是如果右键点击“下载”——“目标另存为”,就能弹出来下载保存的对话框。请问如何能点击“下载”就自动实现下载或者弹出保存的那个对话框啊??
最佳答案
- 二级知识专家网友:一池湖水
- 2021-04-07 13:47
// 设置返回内容的类型
Response.ContentType = "application/octet-stream";
// 通知浏览器,弹出对话框
Response.AddHeader( "Content-Disposition","attachment; filename=xxx.jpg")
Response.ContentType = "application/octet-stream";
// 通知浏览器,弹出对话框
Response.AddHeader( "Content-Disposition","attachment; filename=xxx.jpg")
全部回答
- 1楼网友:初心未变
- 2021-04-07 15:36
关注中
- 2楼网友:樣嘚尐年
- 2021-04-07 15:05
using system;
using system.data;
using system.configuration;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
using system.io;
public partial class _default : system.web.ui.page
{
protected void page_load(object sender, eventargs e)
{
}
//transmitfile实现下载
protected void button1_click(object sender, eventargs e)
{
response.contenttype = "application/x-zip-compressed";
response.addheader("content-disposition", "attachment;filename=z.zip");
string filename = server.mappath("download/z.zip");
response.transmitfile(filename);
}
//writefile实现下载
protected void button2_click(object sender, eventargs e)
{
string filename ="asd.txt";//客户端保存的文件名
string filepath=server.mappath("download/aaa.txt");//路径
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();
}
//writefile分块下载
protected void button3_click(object sender, eventargs e)
{
string filename = "aaa.txt";//客户端保存的文件名
string filepath = server.mappath("download/aaa.txt");//路径
system.io.fileinfo fileinfo = new system.io.fileinfo(filepath);
if (fileinfo.exists == true)
{
const long chunksize = 102400;//100k 每次读取文件,只读取100k,这样可以缓解服务器的压力
byte[] buffer = new byte[chunksize];
response.clear();
system.io.filestream istream = system.io.file.openread(filepath);
long datalengthtoread = istream.length;//获取下载的文件总大小
response.contenttype = "application/octet-stream";
response.addheader("content-disposition", "attachment; filename=" + httputility.urlencode(filename));
while (datalengthtoread > 0 && response.isclientconnected)
{
int lengthread = istream.read(buffer, 0, convert.toint32(chunksize));//读取的大小
response.outputstream.write(buffer, 0, lengthread);
response.flush();
datalengthtoread = datalengthtoread - lengthread;
}
response.close();
}
}
//流方式下载
protected void button4_click(object sender, eventargs e)
{
string filename = "aaa.txt";//客户端保存的文件名
string filepath = server.mappath("download/aaa.txt");//路径
//以字符流的形式下载文件
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.end();
}
}
这里提供4种常用下载方式 以供参考
- 3楼网友:走,耍流氓去
- 2021-04-07 14:47
你好,能教教我吗?上传和下载功能的实现,谢谢了,q:279480453
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |