中易网

C#如何实现 文件 下载 功能??

答案:4  悬赏:10  
解决时间 2021-04-08 03:30
我在开发网站中,写了一个上传附件的功能,文件保存到目录下,路径保存到数据库中,上传现在是写完了,但是下载的时候有一些小问题。当前我写的下载功能之直接把 上传的附件对应的物理路径 作为链接添加到了“下载”链接上,这样点击“下载”有些类型的文件能自动下载,如 .rar格式的文件,但是例如.jpg、.txt、.mp3等格式的文件就不能自动下载,而是在线给打开了,这样就体现不了下载的功能了,但是如果右键点击“下载”——“目标另存为”,就能弹出来下载保存的对话框。请问如何能点击“下载”就自动实现下载或者弹出保存的那个对话框啊??
最佳答案
// 设置返回内容的类型
Response.ContentType = "application/octet-stream";
// 通知浏览器,弹出对话框
Response.AddHeader( "Content-Disposition","attachment; filename=xxx.jpg")
全部回答
关注中
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种常用下载方式 以供参考
你好,能教教我吗?上传和下载功能的实现,谢谢了,q:279480453
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
教学楼加固改造工程属于什么招投标
翔隆宾馆地址有知道的么?有点事想过去
干部履历表中国内外主要社会关系情况一定要填
黑莓play book怎么换壁纸?求详细过程
女朋友知道我的社交帐号密码,她却不肯告诉我
供热室温非常低 供热公司说不是他们的问题 我
佛教用的是什么符
风速 网球
买家买了一件130元包邮的衣服,为什么申请退
平菇黄瓜火腿汤的做法
送子观音我想知道这个在什么地方
选出下列各项中加点的文言词语解释不当的一项
用nero刻盘步骤,刻MP4(电视剧)?
钟村图书馆在哪
有16开和18开的两种纸张,纵向放置时
推荐资讯
很后悔之前分期付款买了台手机,现在每个月17
稻田养鱼会稻壮鱼肥.稻和鱼之间的关系是____
win7和linux双系统启动项如何修改
怎么在路由封迅雷端口
打印机的有机物纤维粉末会对人产生什么危害?
随州举办的寻根节什么时候到啊?
篮球。我擅长突破。有非常稳定的上篮。有时候
新的羊毛衣服穿的时候要不要先冼洗
钜惠商城地址在什么地方,想过去办事
摩托发动机让人从加机油处放进了沙子 骑了几
怎样才能减少沙尘暴的发生,植树就就说了啊,
江苏阳光股份有限公司纺织服装出口贸易现状与
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?