• mvc根据绝对路径下载文件


      首先页面需要一个a标签直接指向下载文件的Action并传值:图片地址,以及图片名称(记住要带后缀名的).

      然后是Action里面的代码.

            /// <summary>
            /// 根据文件地址下载文件
            /// </summary>
            /// <param name="fileUrl">图片完整路径</param>
            /// <param name="fileName">图片名称</param>
            /// <returns></returns>
            public ActionResult DownloadFile(string fileUrl, string fileName)
            {
                var _buffer = SiteHelper.DownloadFile(fileUrl);
                
                return File(_buffer, MimeMapping.GetMimeMapping(fileUrl), fileName);
            }

      SiteHelper.DownloadFile(fileUrl)方法是根据路径,请求出文件流,然后返回出来.

      MimeMapping.GetMimeMapping()方法是返回映射指定的文件名的MIME.

      fileName就是文件的完整名称.(注意后缀名:.jpg.txt.png等等).  

      下面贴出SiteHelper.DownloadFile()代码:

            /// <summary>
            /// 根据文件地址返回文件流
            /// </summary>
            /// <param name="fileUrl">文件地址</param>
            /// <returns></returns>
            public static byte[] DownloadFile(string fileUrl)
            {
                //创建一个请求对象
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileUrl);
                //超时时间
                request.Timeout = 60000;
                //获取回写流
                WebResponse response = request.GetResponse();
    
                byte[] buffer = new byte[1024];
    
                int actual = 0;
                using (Stream s = response.GetResponseStream())
                {
                    //先保存到内存流中MemoryStream
                    MemoryStream ms = new MemoryStream();
                    while ((actual = s.Read(buffer, 0, 1024)) > 0)
                    {
                        ms.Write(buffer, 0, actual);
                    }
    
                    ms.Position = 0;
                    //再从内存流中读取到byte数组中
                    buffer = ms.ToArray();
                }
    
                return buffer;
            }

      这个循环是为了取出完整的文件而写(文件太大,有可能一次并没有取完).

      最后结果:

      

  • 相关阅读:
    Hadoop源代码分析
    Java中如何把两个数组合并为一个
    数据库死锁的解决办法
    Java程序中解决数据库超时与死锁
    mysql 死锁检查
    JDBC事务和数据库事务嵌套的讨论 .
    嵌套事务和事务保存点的错误处理
    java string常见操作题
    java基本数据类型包装类
    java string
  • 原文地址:https://www.cnblogs.com/yan0720/p/9711390.html
Copyright © 2020-2023  润新知