网站下载各种文件的通用解决方案

 做项目中遇到了要下载数据库的文件并且在浏览器中打开,中间遇到了点问题  ,不过最终还是解决了。

步入正题:首先讲一下浏览器下载文件的逻辑。1.用户在客户端触发下载按钮。2.发送请求到服务端后台代码。3.服务端处理文件程序。4.返回到客户端前台。

先讲一下第3部分:写服务器代码时不同的编程语言代码会不相同,但是Http协议相同的, 所以无论是用.net  java   php   用mvc 还是不用mvc。都会得到想要的结果。

拿.net  mvc框架为例子 下载代码;

     public ActionResult DownLoad(int id)
        {
   
            Response.ContentType = "application/octet-stream";
            //通知浏览器下载文件而不是打开 FilieName:要下载的文件名
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(FilieName, System.Text.Encoding.UTF8));
           //byte[]  传输报文的流内容

           Response.BinaryWrite(byte[]);
            Response.Flush();
            Response.End();
            return null; 
         }

虽然我用的是 mvc control做的请求,但是我返回的并不是 control 的ActionResult 类型,而是设置 http报文流内容 ,并且以response响应的方式将报文返回给客户端。文件的二进制流的转换就不在赘述了 ,是通过文件路径,还是数据库字段那就是看你自己文件数据源的需求了。

4.第3部分处理完成之后。正常情况下浏览器页面会一个提示下载的提示框。不同浏览器是不同的,谷歌会直接在左下角下载,ie会提示下载。

不正常的情况就是浏览器没反应或者是报错。这里的主要原因就是第2部分请求的方式不对,千万不要用ajax或者jqurey的请求方式,因为他们的返回类型中没有流类型。

所以请求这可以用一个隐藏的form做提交 ,代码如下

function DownFile(id)
        {
            var form = $("<form>");//定义一个form表单
            form.attr("style", "display:none");
            form.attr("target", "");
            form.attr("method", "post");
            form.attr("action", "/AirportAi/DownLoadAi");
            var input1 = $("<input>");

          //需要添加的参数
            input1.attr("type", "hidden");
            input1.attr("name", "id");
            input1.attr("value", id);
            $("body").append(form);//将表单放置在web中
            form.append(input1);
            form.submit();
    
        }

当然也可以用其他方式提交,这里就不在赘述了,只是总结经验如果有错误欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值