zoukankan      html  css  js  c++  java
  • 物理路径,虚拟路径,物理路径与虚拟路径转换,文件下载方法

     

    1 什么是物理路径?什么是虚拟路径?
    (1) 例子:
      用IIS举个例子:   
      WEB服务目录是d:路径   
      那么用HTTP访问网站根目录的时候,其实访问的是d:路径,那么其中虚拟路径就是(根),物理路径就是d:路径 
     
    (2) 我自己的理解:绝对路径一般都是带有磁盘完成路径, 而虚拟路径一般不带有磁盘

    2 程序中虚拟路径和物理路径的转化

           #region 物理路径和相对路径的转换
            //本地路径转换成URL相对路径  
            private string urlconvertor(string imagesurl1)
            {
                string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
                string imagesurl2 = imagesurl1.Replace(tmpRootDir, ""); //转换成相对路径
                imagesurl2 = imagesurl2.Replace(@"", @"/");
                //imagesurl2 = imagesurl2.Replace(@"Aspx_Uc/", @"");
                return imagesurl2;
            }
            //相对路径转换成服务器本地物理路径  
            private string urlconvertorlocal(string imagesurl1)
            {
                string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录 
                string imagesurl2 = tmpRootDir + imagesurl1.Replace(@"/", @""); //转换成绝对路径 
                return imagesurl2;
            }
            #endregion

    3 下载的方法

           /// <summary>
            /// 获取物理地址
            /// </summary>
            public static string MapPathFile(string FileName)
            {
                return HttpContext.Current.Server.MapPath(FileName);
            }
            /// <summary>
            /// 普通下载
            /// </summary>
            /// <param name="FileName">文件虚拟路径</param>
            public static bool DownLoadold(string FileName)
            {
                bool bools = false;
                string destFileName = MapPathFile(FileName);
                if (File.Exists(destFileName))
                {
                    FileInfo fi = new FileInfo(destFileName);
                    HttpContext.Current.Response.Clear();
                    HttpContext.Current.Response.ClearHeaders();
                    HttpContext.Current.Response.Buffer = false;
                    HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Path.GetFileName(destFileName), System.Text.Encoding.UTF8));
                    HttpContext.Current.Response.AppendHeader("Content-Length", fi.Length.ToString());
                    HttpContext.Current.Response.ContentType = "application/octet-stream";
                    HttpContext.Current.Response.WriteFile(destFileName);
                    HttpContext.Current.Response.Flush();
                    HttpContext.Current.Response.End();
                    bools = true;
                }
                return bools;
            }

            public static void ResponseFile(string path, HttpContext context)
            {
                context = HttpContext.Current;

                System.IO.Stream iStream = null;
                byte[] buffer = new Byte[10000];
                int length;
                long dataToRead;
                string filename = System.IO.Path.GetFileName(path);

                try
                {
                    iStream = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
                    dataToRead = iStream.Length;
                    context.Response.ContentType = "application/octet-stream";
                    context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));

                    while (dataToRead > 0)
                    {
                        if (context.Response.IsClientConnected)
                        {
                            length = iStream.Read(buffer, 0, 10000);
                            context.Response.OutputStream.Write(buffer, 0, length);
                            context.Response.Flush();

                            buffer = new Byte[10000];
                            dataToRead = dataToRead - length;
                        }
                        else
                        {
                            dataToRead = -1;
                        }
                    }
                }
                catch (Exception ex)
                {
                    context.Response.Write(ex.Message);
                }
                finally
                {
                    if (iStream != null)
                    {
                        iStream.Close();
                    }
                }
            }

            public static void ResponseFile(string path, string fileName, HttpContext context)
            {
                context = HttpContext.Current;

                System.IO.Stream iStream = null;
                byte[] buffer = new Byte[10000];
                int length;
                long dataToRead;

                try
                {
                    iStream = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
                    dataToRead = iStream.Length;
                    context.Response.ContentType = "application/octet-stream";
                    context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));

                    while (dataToRead > 0)
                    {
                        if (context.Response.IsClientConnected)
                        {
                            length = iStream.Read(buffer, 0, 10000);
                            context.Response.OutputStream.Write(buffer, 0, length);
                            context.Response.Flush();

                            buffer = new Byte[10000];
                            dataToRead = dataToRead - length;
                        }
                        else
                        {
                            dataToRead = -1;
                        }
                    }
                }
                catch (Exception ex)
                {
                    context.Response.Write(ex.Message);
                }
                finally
                {
                    if (iStream != null)
                    {
                        iStream.Close();
                    }
                }
            }

  • 相关阅读:
    PAT B1045 快速排序 (25 分)
    PAT B1042 字符统计 (20 分)
    PAT B1040 有几个PAT (25 分)
    PAT B1035 插入与归并 (25 分)
    PAT B1034 有理数四则运算 (20 分)
    PAT B1033 旧键盘打字 (20 分)
    HDU 1231 最大连续子序列
    HDU 1166 敌兵布阵
    HDU 1715 大菲波数
    HDU 1016 Prime Ring Problem
  • 原文地址:https://www.cnblogs.com/cyl048/p/6802491.html
Copyright © 2011-2022 走看看