C#上传之虚拟路径和绝对路径

原创 2017年07月26日 13:28:36

1.基本信息
a.文件名

fileName="程序员周加班清单.xlsx";

b.上传的文件都存在此目录下

everFolder="~/Upload/";

c.上传的文件存在Upload目录下的文件夹,或通过传值,或其他

downLoadFolder=context.Request.Form["DownLoadFolder"];

2.获取文件夹虚拟路径

public string GetRelativePath(HttpContext context)
{
    string fileFolder = string.IsNullOrEmpty(
            context.Request.QueryString["DownLoadFolder"]) ? 
            context.Request.Form["DownLoadFolder"] : 
            context.Request.QueryString["DownLoadFolder"];
    string path = "~/Upload/";
    if (!string.IsNullOrEmpty(fileFolder.Trim()))
    {
         path = Path.Combine(path, fileFolder);
    }
    //保证其路径的正确,匹配{\|/},用DirectorySeparatorChar{\}替换
    //可以不用写
    Regex r = new Regex("\\|/", RegexOptions.None);
    path = r.Replace(path, Path.DirectorySeparatorChar.ToString());
    return path;
}

我这里执行的结果结果:"~/Upload/PROOther"

3.将"~/Upload/PROOther"转换为绝对路径,并判断其文件夹是否存在,不存在就创建。

private static string BuildPath(string path)
{
    //如果有path就转换为绝对路径
    if (!Path.IsPathRooted(path))
    {
        path = HttpContext.Current.Server.MapPath(path);
    }
    //如果没有`"~/Upload/PROOther"`这个文件夹就创建
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }
    return Path.GetFullPath(path);
}

执行结果:

"D:\\TFS\\Demo\\Demo.Website\\Upload\\PROOther"

3.用日期+GUID为文件命名
path:为2的结果;fileName:为1中文件名。

private string GetRenewName(string path, string fileName)
{
    string strFullPath = string.Empty;
    string strNewName = fileName;
    //文件名,不含后缀
    string fileNameNoExt = fileName;
    //文件后缀名,包含“.”
    string fileExtension = string.Empty;
    int i = fileName.LastIndexOf('.');
    if (i > 0)
    {
        //文件名,不含后缀,Substring截取时不包括endindex,此处不需减1
        fileNameNoExt = fileName.Substring(0, i);
        //文件后缀
        fileExtension = fileName.Substring(i, fileName.Length - i);
    }
    //用GUID作为文件名
    strNewName = string.Format("{0}_{1}{2}", 
                 DateTime.Now.ToString("yyyy-MM-dd"), 
                 Guid.NewGuid(), fileExtension);
    return strNewName;
}

结果:
"2017-07-26_ebd1c686-9ce2-4850-af38-8b74a9cca7ad.xlsx"

4.虚拟文件路径,绝对文件路径

relativeFilePath = Path.Combine(relativePath, strNewFileName);

结果:"~/Upload/PROOther\\2017-07-26_ebd1c686-9ce2-4850-af38-8b74a9cca7ad.xlsx"

clientFilePath = VirtualPathUtility.ToAbsolute(relativeFilePath);

结果:"~/Upload/PROOther/2017-07-26_ebd1c686-9ce2-4850-af38-8b74a9cca7ad.xlsx"
5.文件全路径

fullPath:”D:\TFS\Demo\Demo.Website\Upload\PROOther”

destFile = Path.Combine(fullPath, strNewFileName);

结果:
"D:\\TFS\\Demo\\Demo.Website\\Upload\\PROOther\\2017-07-26_ebd1c686-9ce2-4850-af38-8b74a9cca7ad.xlsx"
6.保存
我这里用的是ashx.cs保存

HttpPostedFile hpfFile = context.Request.Files[0];
hpfFile.SaveAs(destFile);

以上有些步骤是不需要的!如有错误,请留言偏于改正,谢谢!

版权声明:本文为博主原创文章,未经博主允许不得转载。

(项目笔记) 相对路径、绝对路径以及虚拟路径

绝对路径 相对路径以及虚拟路径
  • qq_26368811
  • qq_26368811
  • 2017年09月10日 02:00
  • 188

虚拟路径和绝对路径

物理路径就是绝对路径,虚拟路径就是相对路径。绝对路径是指定文件的绝对位置。 大家都知道,在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径,例如只要看到这个路径...
  • wangshengli555
  • wangshengli555
  • 2017年09月16日 14:33
  • 41

linux下对绝对路径和相对路径的理解

假如你 要切换到当前目录下的 etc  目录中去 那么就用这个  cd  etc  这就是相对路径,而这种写法  cd  /etc 就是回到根目录下的etc 目录下 绝对路径 ,绝对路径文件前面多出一...
  • fengren_520
  • fengren_520
  • 2015年01月12日 15:05
  • 6668

Tomcat配置绝对路径,使上传文件与服务器分离

遇到问题介绍:项目中文件上传,上传文件到服务器以后,如果使用tomcat下的目录作为上传文件的路径,则每次重启服务器文件将消失; 解决办法:首先想到的是存储到磁盘下面(例如:/Users/apple...
  • ahou2468
  • ahou2468
  • 2017年11月17日 18:58
  • 346

绝对路径和相对路径总结

虽然入门的时候第一个接触的概念就是绝对路径和相对路径,但是在使用的时侯,仍然会出现很多的问题,今天就把以往会犯的错误做一个总结。 一、绝对路径 概念:是从盘符开始的路径,形如C:\windows\...
  • moqiang02
  • moqiang02
  • 2013年10月14日 18:51
  • 1542

关于虚拟路径和绝对路径(Tomcat)

server.xml相关配置如下:   request.getServletPath()得到访问路径------------------>/index.jsp request.getContextP...
  • qq_26988127
  • qq_26988127
  • 2017年06月15日 10:44
  • 179

linux的绝对路径跟相对路径怎么解释

简单描述linux相对路径和绝对路径
  • HaveAJaguar
  • HaveAJaguar
  • 2015年05月18日 22:15
  • 632

java里绝对路径和相对路径的区别

转自:http://zhidao.baidu.com/link?url=FAmqfIqsR8oISZGZJA9nvXhNNe7XhcIdcgY1Ti6oN9RSiNjGy4CZBKe2kSgQB2j-...
  • suyu_yuan
  • suyu_yuan
  • 2016年10月04日 12:50
  • 3325

linux学习相对路径与绝对路径

linux学习相对路径与绝对路径
  • pingdouble
  • pingdouble
  • 2016年02月17日 09:40
  • 1724

相对路径与绝对路径个人理解

绝对路径分为本地绝对路径和网路绝对路径两种 本地绝对路径:即物理路径,某一个具体的文件所在的磁盘的路径 网路绝对路径:即对某一资源进行访问时的IP地址 相对路径也分为两种包括以'/'开头的和不以'/'...
  • qq_34970891
  • qq_34970891
  • 2017年08月11日 20:37
  • 557
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#上传之虚拟路径和绝对路径
举报原因:
原因补充:

(最多只允许输入30个字)