如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示:

// Classic ASP.NET

public class HomeController : Controller
{
    public ActionResult Index()
    {
        string physicalWebRootPath = Server.MapPath("~/");
        
        return Content(physicalWebRootPath);
    }
}

但是在ASPNET Core中不存在Server.MapPath()方法,Controller基类也没有Server属性。

在Asp.Net Core中取得物理路径:

从ASP.NET Core RC2开始,可以通过注入 IHostingEnvironment 服务对象来取得Web根目录和内容根目录的物理路径,如下所示:

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;

namespace AspNetCorePathMapping
{
    public class HomeController : Controller
    {
        private readonly IHostingEnvironment _hostingEnvironment;

public HomeController(IHostingEnvironment hostingEnvironment)
        {
            _hostingEnvironment = hostingEnvironment;
        }

public ActionResult Index()
        {
            string webRootPath = _hostingEnvironment.WebRootPath;
            string contentRootPath = _hostingEnvironment.ContentRootPath;

return Content(webRootPath + "\n" + contentRootPath);
        }
    }
}

我在 ~/Code/AspNetCorePathMapping 目录下创建了一个示例 Asp.Net Core 应用程序,当我运行时,控制器将返回以下两个路径:

这里要注意区分Web根目录 和 内容根目录的区别:

Web根目录是指提供静态内容的根目录,即asp.net core应用程序根目录下的wwwroot目录

内容根目录是指应用程序的根目录,即asp.net core应用的应用程序根目录

ASP.NET Core RC1

在ASP.NET Core RC2之前 (就是ASP.NET Core RC1或更低版本),通过 IApplicationEnvironment.ApplicationBasePath 来获取 Asp.Net Core应用程序的根目录(物理路径) :

using Microsoft.AspNet.Mvc;
using Microsoft.Extensions.PlatformAbstractions;

namespace AspNetCorePathMapping
{
    public class HomeController : Controller
    {
        private readonly IApplicationEnvironment _appEnvironment;

public HomeController(IApplicationEnvironment appEnvironment)
        {
            _appEnvironment = appEnvironment;
        }

public ActionResult Index()
        {
            return Content(_appEnvironment.ApplicationBasePath);
        }
    }
}

.net core保存图片,路径问题

0

 悬赏园豆:10 [已解决问题] 浏览: 1164次 解决于 2018-11-14 18:05 

我有一个保存上传图片的.net core部署在我的centos7服务器上,但是每次图片并没有保存到站点的/home/wwwroot/file/wwwroot/images/文件夹下,而是在/home/wwwroot/文件夹,很神奇,filepath的路径可以输出/home/wwwroot/file/wwwroot/images/,但是不知道为什么就是存不到那里去。
这个我的源码:

这是我用来测试图片路径的接口:http://static.lovemoqing.com/Home/Test/
可以输出/home/wwwroot/file/wwwroot/images/

希望可以帮我解答一下 。我对文件夹操作不是很熟悉,如果要设置用户组权限啥的希望可以贴一下命令(/ω\)不胜感激

最佳答案

1

bmp2.Save 传参错了,应该是 filePath ,你写成了 filename

.net core 获取网站根目录

string rootdir = AppContext.BaseDirectory;
DirectoryInfo Dir = Directory.GetParent(rootdir);
string root = Dir.Parent.Parent.FullName;

.Net Core 获取程序当前路径
测试环境
测试代码
输出
win-x64
linux-64
总结
测试环境
主要对.Net Core下的几种获取文件方式进行测试,
测试环境
.Net Standard 2.0 类库 ClassLibrary1
.Net Core 3.1控制台程序 LinuxPathTest

发布分别打包为linux-x64和win-x64 无依赖 单文件 裁剪未使用程序集

测试代码
ClassLibrary1

using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;namespace ClassLibrary1
{public class Library: IEnumerable<string>{public IEnumerator<string> GetEnumerator(){yield return $"{Environment.CurrentDirectory}";yield return $"{Directory.GetCurrentDirectory()}";yield return $"{GetType().Assembly.Location}";yield return $"{Process.GetCurrentProcess().MainModule.FileName}";yield return $"{AppDomain.CurrentDomain.BaseDirectory}";}IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();}}
}

LinuxPathTest

using ClassLibrary1;using System;
using System.Diagnostics;
using System.IO;namespace LinuxPathTest
{class Program{static void Main(string[] args){Console.WriteLine("-------------------------------");foreach (var item in new Library()){Console.WriteLine($"{item}");}Console.WriteLine("-------------------------------");Console.WriteLine($"{Environment.CurrentDirectory}");Console.WriteLine($"{Directory.GetCurrentDirectory()}");Console.WriteLine($"{(new object()).GetType().Assembly.Location}");Console.WriteLine($"{Process.GetCurrentProcess().MainModule.FileName}");Console.WriteLine($"{AppDomain.CurrentDomain.BaseDirectory}");Console.WriteLine($"{AppDomain.CurrentDomain.SetupInformation.ApplicationBase}"); // .net standard 不支持Console.ReadLine();}}
}

输出

win-x64

可执行文件所在路径 E:\Projects\LinuxPathTest\LinuxPathTest\bin\Release\netcoreapp3.1\publish

-------------------------------
E:\Projects\LinuxPathTest\LinuxPathTest\bin\Release\netcoreapp3.1\publish
E:\Projects\LinuxPathTest\LinuxPathTest\bin\Release\netcoreapp3.1\publish
C:\Users\用户名\AppData\Local\Temp\.net\LinuxPathTest\3c0ont0d.sts\ClassLibrary1.dll
E:\Projects\LinuxPathTest\LinuxPathTest\bin\Release\netcoreapp3.1\publish\LinuxPathTest.exe
C:\Users\用户名\AppData\Local\Temp\.net\LinuxPathTest\3c0ont0d.sts\
-------------------------------
E:\Projects\LinuxPathTest\LinuxPathTest\bin\Release\netcoreapp3.1\publish
E:\Projects\LinuxPathTest\LinuxPathTest\bin\Release\netcoreapp3.1\publish
C:\Users\用户名\AppData\Local\Temp\.net\LinuxPathTest\3c0ont0d.sts\System.Private.CoreLib.dll
E:\Projects\LinuxPathTest\LinuxPathTest\bin\Release\netcoreapp3.1\publish\LinuxPathTest.exe
C:\Users\用户名\AppData\Local\Temp\.net\LinuxPathTest\3c0ont0d.sts\
C:\Users\用户名\AppData\Local\Temp\.net\LinuxPathTest\3c0ont0d.sts\

linux-64

可执行文件路径 /home/用户名/Desktop/Test

-------------------------------
/home/用户名/Desktop/Test
/home/用户名/Desktop/Test
/var/tmp/.net/LinuxPathTest/5kkarywl.a5s/ClassLibrary1.dll
/home/用户名/Desktop/Test/LinuxPathTest
/var/tmp/.net/LinuxPathTest/5kkarywl.a5s/
-------------------------------
/home/用户名/Desktop/Test
/home/用户名/Desktop/Test
/var/tmp/.net/LinuxPathTest/5kkarywl.a5s/System.Private.CoreLib.dll
/home/用户名/Desktop/Test/LinuxPathTest
/var/tmp/.net/LinuxPathTest/5kkarywl.a5s/
/var/tmp/.net/LinuxPathTest/5kkarywl.a5s/

总结

.Net Core 打包为自宿主无依赖的单文件之后,因为多出一步将文件释放到临时文件的操作,
一些获取文件路径的方式得到的结果可能和.Net Framework 下不一致。

Net Core api 中获取应用程序物理路径wwwroot相关推荐

  1. html 读取物理路径,.Net Core api 中获取应用程序物理路径wwwroot

    如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: //Classic ...

  2. ASPNET Core api 中获取应用程序物理路径wwwroot

    如果要得到传统的ASP.Net应用程序中的相对路径或虚拟路径对应的服务器物理路径,只需要使用使用Server.MapPath()方法来取得Asp.Net根目录的物理路径,如下所示: // Classi ...

  3. 如何在.NET控制台应用程序中获取应用程序的路径?

    如何在控制台应用程序中找到应用程序的路径? 在Windows Forms中 ,我可以使用Application.StartupPath查找当前路径,但这似乎在控制台应用程序中不可用. #1楼 上面的答 ...

  4. 定时发布任务,在global.asax中获取文件的物理路径的方法

    如果要把一个相对路径或者虚拟路径映射道服务器的物理路径,通常会使用Server.MapPath()函数,比如将根目录下的html目录映射为物理路径:Server.MapPath("html& ...

  5. 我的第一个翻译作品 - Acrobat core API中的两章

    第2章 理解插件 这一章提供一个总览,插件如何被载入,被初始化,被卸载,以及其它与插件和PDF库应用相关的概念.推荐你在开始开发插件或PDF库应用之前阅读本章节. 第1节 关于插件初始化 这部分描述A ...

  6. C# WinForm中获取当前程序运行目录的方法

    C# WinForm中获取当前程序运行目录的方法: "AppDomain.CurrentDomain.BaseDirectory":获取当前应用程序所在目录的路径,最后包含&quo ...

  7. android中获取应用程序(包)的信息,Android中获取应用程序(包)的信息PackageManager的使用(一).doc...

    Android中获取应用程序(包)的信息PackageManager的使用(一) 本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等 ...

  8. python 获取参数模块_Python中获取启动程序时后面跟的参数的方法(optparse模块)【冰斌棒】...

    Python中获取启动程序时后面跟的参数的方法(optparse模块)[冰斌棒] 3年前 (2018-01-29)    作者:冰斌棒    分类:冰斌棒18程序计划    阅读次数:871 评论(0 ...

  9. 在Java代码(非JSP及Action,Servlet,Controller)中获得WebRoot的物理路径

    在开发Web方面的应用时, 常常须要获取 server中当前WebRoot的物理路径; 假设是Servlet , Action , Controller, 或则Filter , Listener , ...

最新文章

  1. Rational工具介绍『转』
  2. 大厂首发!java敏捷开发模式面试题
  3. 重庆大学计算机组成,重庆大学计算机组成原理试题集(含部分答案)
  4. UI素材|最全面的移动端 UI KIT 模板
  5. c#中using 和new
  6. 如何做一个“千里马”
  7. [高中作文赏析]渴望从前
  8. 通信原理6.2-6.4码型及码间串扰
  9. 怎么把Word文档转换成长图
  10. nssl-1336 膜拜神牛
  11. java base64解码乱码_java base64解码 怎么是乱码呢
  12. 毕设——基于SpringBoot的电影荐评系统
  13. 计算机开机键盘屏幕无反应,电脑开机后键盘显示器无反应怎么解决
  14. win10连无线但是无网络连接到服务器,简单几步解决win10连接wifi显示无internet访问的问题...
  15. lol服务器维护补偿,LOL官方:服务器崩溃补偿!全服再次免费赠送皮肤一款!
  16. 爬取《悲伤逆流成河》猫眼信息 | 郭敬明五年电影最动人之作
  17. GeoHash介绍及使用
  18. XML入门教程(3)
  19. 单一用户登录,即当前用户登录后要踢出前一个登录,即做出踢人效果,如何实现?
  20. C++实现简单Kmeans聚类算法

热门文章

  1. 7-21 求特殊方程的正整数解(15 分)
  2. 数组:如何把一个数组循环右移K位
  3. UNet语义分割实战:使用UNet实现对人物的抠图
  4. 爱情总是想象比现实美丽
  5. 如何保证手机端的app访问web服务器的安全
  6. 计算机主机上的接口的作用及名称,给大家及各位电脑小白们科普一下电脑主板各个接口的名称及作用...
  7. JVM之垃圾回收-垃圾收集算法
  8. 论文阅读笔记:Neural Speech Synthesis with Transformer Network
  9. iPhone X将掀手机新革命
  10. 2023秋招nlp笔试题-太初