我需要使用我的应用程序将一些文件上传到服务器,并且需要提供要保存文件的文件夹的完整路径。
我正在使用dbConnect(odbc(),
.connection_string = "Driver={Simba Athena ODBC Driver};",
driver = "/Library/simba/athenaodbc/lib/libathenaodbc_sbu.dylib",
Schema = "...",
AwsRegion = "...",
AuthenticationType = "IAM Credentials",
UID = "...",
PWD = "...",
sessiontoken = "...",
S3OutputLocation = "...")
方法和来自appsettings.json的Path.Combine
其他文件夹路径和文件名。
代码如下:
webHostEnvironment.WebRootPath
问题是var pathString = configuration.GetValue<string>("UploadPaths:Pictures");
var path = Path.Combine(webHostEnvironment.WebRootPath, pathString, picture.Name);
变量中webHostEnvironment.WebRootPath
被忽略了(路径看起来像pathString + picture.Name)。
有人知道如何获得正确的路径吗?
答案 0 :(得分:0)
您应该为Path.Combine
签出full documentation。可能会发生一些奇怪的事情。根据您的描述,似乎pathString
来自您的配置文件,其中包含一个根(即,它不是相对路径)。
var path = Path.Combine("path1", "c:\path2", "path3");
// path is c:\path2\path3, since an argument with a root overrides any previous argument
答案 1 :(得分:0)
在ASP.NET Core中,可以通过注入和查询val rdd4: RDD[Row] = rdd1.mapPartitions((it:Iterator[String]) => {
def createrow(a: List[String]): Row = {
val format = new java.text.SimpleDateFormat("dd/MMM/yyyy HH:mm:ss Z")
val re1: Row = Row.apply(a.head)
val d: Date = format.parse(a.tail.mkString(" "))
val t = new Timestamp(d.getTime)
val re2: Row = Row.apply(t)
Row.merge(re1, re2)
}
var output: List[Row] = List()
while (it.hasNext) {
val data: String = it.next()
val res = data match {
case rx(ipadd, date, time) => createrow(List(ipadd, date, time))
case _ => createrow(List("0.0.0.0", "00/Jan/0000", "00:00:00 0"))
}
output = output :+ res
}
output.toIterator
}).persist(MEMORY_ONLY)
// Collect and Persist the RDD in Memory
val tmp = rdd4.collect()
服务来检索到Web根目录和内容根目录的物理路径:
IHostingEnvironment
您可以看看Getting the Web Root Path and the Content Root Path in ASP.NET Core。
答案 2 :(得分:0)
如果您使用的是Asp.net core 3,请使用IWebHostEnvironment
代替IHostingEnvironment
。
将IWebHostEnvironment作为依赖项注入到依赖类中。https://github.com/aspnet/AspNetCore/issues/7749
public class HomeController : Controller
{
private readonly IWebHostEnvironment _webHostEnvironment;
public HomeController(IWebHostEnvironment webHostEnvironment)
{
_webHostEnvironment= webHostEnvironment;
}
public IActionResult Index()
{
return Content(_webHostEnvironment.WebRootPath + "\n" + _webHostEnvironment.ContentRootPath);
}
}
在2.1中引入Microsoft.Extensions.Hosting时,某些类型 如IHostingEnvironment和IApplicationLifetime是从 Microsoft.AspNetCore.Hosting。某些3.0更改导致应用包含 Microsoft.Extensions.Hosting和Microsoft.AspNetCore.Hosting都 命名空间。对这些重复类型的任何使用都会导致“模棱两可” 同时引用两个名称空间时,“引用”编译器错误。
此错误已在3.0.0-preview3中通过标记为 以下类型已过时,并用新类型替换。有 没有对新类型进行任何行为更改,仅是命名。
Obsolete types (warning): Microsoft.Extensions.Hosting.IHostingEnvironment Microsoft.AspNetCore.Hosting.IHostingEnvironment Microsoft.Extensions.Hosting.IApplicationLifetime Microsoft.AspNetCore.Hosting.IApplicationLifetime Microsoft.Extensions.Hosting.EnvironmentName Microsoft.AspNetCore.Hosting.EnvironmentName New types: Microsoft.Extensions.Hosting.IHostEnvironment Microsoft.AspNetCore.Hosting.IWebHostEnvironment : IHostEnvironment Microsoft.Extensions.Hosting.IHostApplicationLifetime Microsoft.Extensions.Hosting.Environments
请注意新的IHostEnvironment IsDevelopment,IsProduction等。 扩展方法在Microsoft.Extensions.Hosting命名空间中 可能需要将其添加到您的应用中。
对于3.0,新旧类型均可从HostBulder的 和WebHostBuilder的依赖项注入容器。旧类型 将在4.0中删除。