zoukankan      html  css  js  c++  java
  • ASP.NET MVC3.0下载功能实现

    C#代码:
    
    #region 下载文件
            /// <summary>
            /// 下载文件
            /// </summary>
            /// <param name="url">文件存放的物流路径</param>
            public void DownloadText(string url) {
                if (System.IO.File.Exists(url))
                {
                    string fileName = Path.GetFileName(url);
                    FileStream fs = new FileStream(url, 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();
                }
                else {
                    Response.Write("<script>alert('没有找到下载的文件,可能已丢失');location.href='/ToolsAndPlug/ToolsAndPlugView';</script>");
                }
            }
            #endregion
    
    Javascirpt提交方法:
    
    function DownloadToolsAndPlug(id) {
        var urlvalue = $("#" + id).val();
        window.location.href = '/ToolsAndPlug/DownloadText?url=' + urlvalue;
    }
    页面:
    
    var id = 1;
        foreach (var item in Model)
        {
        <div class="TP_databg">
            @if (string.IsNullOrEmpty(item.PlugOrToolsImage))
            {
                <img src="../../Image/common/NoPictrue.jpg" />
            }
            else
            {
                <img src="@item.PlugOrToolsImage" />
            }
            <div class="TP_datafont">
                <div class="TP_datafontbg TP_datatitle">
                    @item.PlugOrToolsName</div>
                <div class="TP_datafontbg TP_datasummary">
                    @item.PlugOrToolsSummary</div>
                <div class="TP_datafontbg TP_databutton">
                    <span class="smallbutton" onclick="DownloadToolsAndPlug('psthid@(id)')">下载</span>
                    <input type="hidden" id="psthid@(id)" value="@item.PlugOrToolsUrl"/></div>
            </div>
        </div>
            id = id + 1;
        }
    
    说明:页面使用一个隐藏控件记录要下载文件的物理路径,通过脚本赋值传递给后台代码。
    其他下载方法参考:
    
    //TransmitFile实现下载
        protected void Button1_Click(object sender, EventArgs e)
         {
            /*
              微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite
              下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。
              代码如下:
             */
    
             Response.ContentType = "application/x-zip-compressed";
             Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");
            string filename = Server.MapPath("DownLoad/aaa.zip");
             Response.TransmitFile(filename);
         }
    
        //WriteFile实现下载
        protected void Button2_Click(object sender, EventArgs e)
         {
            /*
              using System.IO;
             
             */
    
            string fileName ="aaa.zip";//客户端保存的文件名
            string filePath=Server.MapPath("DownLoad/aaa.zip");//路径
    
             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.zip";//客户端保存的文件名
            string filePath = Server.MapPath("DownLoad/aaa.zip");//路径
    
             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.zip";//客户端保存的文件名
            string filePath = Server.MapPath("DownLoad/aaa.zip");//路径
    
            //以字符流的形式下载文件
             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();
    
         }
  • 相关阅读:
    PHP保留两位小数的几种方法
    解决PHP下载大文件失败,并限制下载速度
    MySQL索引
    商城商品部分-数据表创建
    string 函数
    array函数
    BTREE这种Mysql默认的索引方式,具有普遍的适用性
    mysql索引类型 normal, unique, full text
    typedef的意义和函数指针
    35. 搜索插入位置-7月17日
  • 原文地址:https://www.cnblogs.com/caoyinglai/p/3624549.html
Copyright © 2011-2022 走看看