物理路径,虚拟路径,物理路径与虚拟路径转换,文件下载方法

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();
                }
            }
        }

时间: 2024-10-11 01:35:42

物理路径,虚拟路径,物理路径与虚拟路径转换,文件下载方法的相关文章

关于虚拟机能ping通物理机,而物理机ping不通虚拟机问题解决。

问题所在:关于虚拟机能ping通物理机,而物理机ping不通虚拟机问题解决. 解决问题:遇到这样的情况就是重装虚拟机,或修复安装虚拟机.

NET 查找程序集路径(CLR关于Assembly的搜索路径的过程)

最近在回顾.Net应用程序的执行环境,这里做一个很小的总结,方面以后需要的时候进行查找: CLR必须可以找到正确的Assembly,Net提供了Assembly搜索算法,可以根据.config文件(类似于.ini)自定义assembly搜索. 算法分析过程如下: 1. 在GAC(Global Assembly Cache)中搜索相应版本的DLL. 2. 配置文件(web.config或app.config)中 <codebase version="Assembly Version"

Form表单中的action路径问题,form表单action路径《jsp---&gt;Servlet路劲问题》这个和上一个《jsp---&gt;Servlet》文章有关

Form表单中的action路径问题,form表单action路径 热度5 评论 50 www.BkJia.Com  网友分享于:  2014-08-14 08:08:01     浏览数44525次 Form表单中的action路径问题,form表单action路径 今天刚接触web,在用jsp和servlet做一个简单的登陆的时候在Form表单action属性和method属性的一些问题: 我遇到的是Form表单提交到servelet处理时遇到的问题: (1)<form name="l

js相对路径相关(比如:js中的路径依赖导入该js文件的路径)

问题描述: 前几天调用同事的js接口文件,在他自己的html测试页面ok,在我这边调用时出现问题. debug过程中,将该测试html移到其他位置都不行,放到原html测试页面同层次路径下是OK的. 解决过程: 很疑问啊,用F12调试下,在调用的js中,发现xmlhttp.status返回状态是404,靠,原来是找不到文件. 仔细看了下,在js中看到如下代码:[var requestURL = "../servlet/ajaxServlet.jsp";]坑爆了, 模糊记得js中引用路径

C# 截取带路径的文件名字,扩展名,等等 的几种方法

C#对磁盘IO操作的时候,经常会用到这些,路径,文件,文件名字,文件扩展名. 之前,经常用切割字符串来实现, 可是经常会弄错. 尤其是启始位置,多少个字节,经常弄晕. 下面这种方法貌似比较简便: string filePath = @"E:\Randy0528\中文目录\JustTest.rar"; Response.Write("文件路径:"+filePath); Response.Write(" 更改路径字符串的扩展名. "); Respon

如何生成一个 WinCE 下文件全路径大于 MAX_PATH(260) 字节的文件路径?

大家都知道,在 Windows 系统中文件名的路径最大值是 MAX_PATH.例如:Windows XP 系统,对文件名的长度进行测试: (1) 在分区 E:\ 的根目录新建一个文件,其文件名最大长度为: 255.---全路径长度>>> 258(2) 在分区 E:\ 子目录 Program Files\ 中新建一个文件,其文件名的最大长度为: 242. ---全路径长度>>>259在 WinCE 系统下,也有一定的限制.另外,如果试图将在 E:\ 根目录新建的最大文件名

根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换

转:http://blog.csdn.net/q445697127/article/details/40537945 /** * 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换 * @param activity * @param imageUri * @author yaoxing * @date 2014-10-12 */ @TargetApi(19) public static String getImageAbsolutePath(Activity context

android4.0下如何判断手机是否有底部物理按键(menu物理按键)

某些手机底部是在触摸屏内部有软按键,就是如(back,home,menu 等)而有的手机底部(非屏幕内部)有物理按键,就是生产厂商不愿意有google自带的虚拟按键,而做的电容式的物理按键,如(back,home,menu 等)android4.0下可以用此判断是否有物理按键:ViewConfiguration.get(this).hasPermanentMenuKey(); android4.0下如何判断手机是否有底部物理按键(menu物理按键),布布扣,bubuko.com

cocos2d-x之物理世界(创建物理世界)

首先在HelloWorld.h中引入包名:#include <Box2D/Box2D.h> 在HelloWorld.h类中添加如下内容: private: b2World *world;//创建一个私有的变量,即物理世界 public: //为了模拟世界的运行,重写update方法,他会没隔一帧执行一次, //我们的世界也要每隔一帧就重新计算一下世界中的物体所处的位置 virtual void update(float dt); 在bool HelloWorld::init()中 //创建一个