C# Path.GetFullPath—;仅返回最后一个文件夹、文件名和扩展名

C# Path.GetFullPath—;仅返回最后一个文件夹、文件名和扩展名,c#,asp.net-mvc,entity-framework,asp.net-mvc-4,asp.net-mvc-5,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Asp.net Mvc 5,我正在尝试获取web应用程序中文件的路径,但它会返回我计算机中的路径 我使用的是mvc 5和ef 6,基本上用户可以上传图片,所有上传的图片都进入~/upload_文件/“当前用户用户名”/ 上载方法将获取当前用户的用户名,如果该文件夹存在,则创建一个,并将所有图片上载到该文件夹中 主要操作方法是显示/Upload_Files文件夹中的所有图片,包括子文件夹中的图片 这在该操作方法中: var imagesModel = new ImageGallery(); var imageFiles =

我正在尝试获取web应用程序中文件的路径,但它会返回我计算机中的路径

我使用的是mvc 5和ef 6,基本上用户可以上传图片,所有上传的图片都进入~/upload_文件/“当前用户用户名”/

上载方法将获取当前用户的用户名,如果该文件夹存在,则创建一个,并将所有图片上载到该文件夹中

主要操作方法是显示/Upload_Files文件夹中的所有图片,包括子文件夹中的图片

这在该操作方法中:

var imagesModel = new ImageGallery();
var imageFiles = Directory.GetFiles(
    Server.MapPath("~/Upload_Files/"), "*.*", SearchOption.AllDirectories);

foreach (var item in imageFiles)
{
    // imagesModel.ImageList.Add(Path.GetFileName(item));
    imagesModel.ImageList.Add(Path.GetFullPath(item));
}
return View(imagesModel);`
在cshtml中显示图片

<img src="@Url.Content(image)" width="150" height="150"/>
图像库类

public class ImageGallery
{
    public ImageGallery()
    {
        ImageList = new List<string>();
    }
    [Key]
    public Guid ID { get; set; }
    public string UserId { get; set; }
    public string Name { get; set; }
    public IEnumerable<string> ImagePath { get; set; }
    public List<string> ImageList { get; set; }

}
公共类图像库
{
公众影像廊()
{
ImageList=新列表();
}
[关键]
公共Guid ID{get;set;}
公共字符串用户标识{get;set;}
公共字符串名称{get;set;}
公共IEnumerable映像路径{get;set;}
公共列表ImageList{get;set;}
}
索引新视图

@model MM5.Models.ImageGallery
@foreach (var image in Model)
            {
                <p>@image</p>
                <a id="ShowImage" title="Photo" href="@Url.Action("Details","ImageGallery", User.Identity.Name)">

                    @*<img src="@Url.Content("~/Upload_Files/" + image. + "/" + image)" width="150" height="150" />*@
                    <img src="@Url.Content(image)" width="150" height="150" />

                </a>
            }
@model MM5.Models.ImageGallery
@foreach(模型中的var图像)
{
@形象

}

我认为我的观点是完全错误的。

我建议不要从视图内部调用方法。但是,您可以使用

var path = Server.MapPath("~/Upload_Files");
应将ViewModel与图像的所有路径一起传递给视图

您应该有一个相对映射,或者在IIS上设置一个虚拟目录,然后获取相对路径并附加它们。您应该将图像目录存储在

Web.config

<add key="ImageUrl" value="/Upload_Files/" />
ViewModel

    class HomeVM
    {
            public IEnumerable<string> ImagePaths { get; set; }
    }

因此,无论何时上载或更改图像,都应该修改表中的值。这将大大提高应用程序的性能

我建议不要从视图内部调用方法。但是,您可以使用

var path = Server.MapPath("~/Upload_Files");
应将ViewModel与图像的所有路径一起传递给视图

您应该有一个相对映射,或者在IIS上设置一个虚拟目录,然后获取相对路径并附加它们。您应该将图像目录存储在

Web.config

<add key="ImageUrl" value="/Upload_Files/" />
ViewModel

    class HomeVM
    {
            public IEnumerable<string> ImagePaths { get; set; }
    }

因此,无论何时上载或更改图像,都应该修改表中的值。这将大大提高应用程序的性能

我建议不要从视图内部调用方法。但是,您可以使用

var path = Server.MapPath("~/Upload_Files");
应将ViewModel与图像的所有路径一起传递给视图

您应该有一个相对映射,或者在IIS上设置一个虚拟目录,然后获取相对路径并附加它们。您应该将图像目录存储在

Web.config

<add key="ImageUrl" value="/Upload_Files/" />
ViewModel

    class HomeVM
    {
            public IEnumerable<string> ImagePaths { get; set; }
    }

因此,无论何时上载或更改图像,都应该修改表中的值。这将大大提高应用程序的性能

我建议不要从视图内部调用方法。但是,您可以使用

var path = Server.MapPath("~/Upload_Files");
应将ViewModel与图像的所有路径一起传递给视图

您应该有一个相对映射,或者在IIS上设置一个虚拟目录,然后获取相对路径并附加它们。您应该将图像目录存储在

Web.config

<add key="ImageUrl" value="/Upload_Files/" />
ViewModel

    class HomeVM
    {
            public IEnumerable<string> ImagePaths { get; set; }
    }

因此,无论何时上载或更改图像,都应该修改表中的值。这将大大提高应用程序的性能

如果需要映射目标目录或其子目录中的图像,我建议:

public string ReverseMapPath(string path)
{
    string appPath = Server.MapPath("~");
    return string.Format("~{0}", path.Replace(appPath, "").Replace("\\", "/"));
}

...

imagesModel.ImageList.Add(ReverseMapPath(item));
基本上,
ReverseMapPath
函数将给定的文件系统路径转换为应用程序虚拟路径。 例如:

D:\Web\MyApp\Upload\u Files\User123\Holiday\意大利人.jpg

翻译成

~/Upload\u Files/User123/Holiday/意大利人.jpg


只是想知道为什么框架中还没有这样的功能。

如果您需要映射目标目录或其子目录中的图像,那么我建议:

public string ReverseMapPath(string path)
{
    string appPath = Server.MapPath("~");
    return string.Format("~{0}", path.Replace(appPath, "").Replace("\\", "/"));
}

...

imagesModel.ImageList.Add(ReverseMapPath(item));
基本上,
ReverseMapPath
函数将给定的文件系统路径转换为应用程序虚拟路径。 例如:

D:\Web\MyApp\Upload\u Files\User123\Holiday\意大利人.jpg

翻译成

~/Upload\u Files/User123/Holiday/意大利人.jpg


只是想知道为什么框架中还没有这样的功能。

如果您需要映射目标目录或其子目录中的图像,那么我建议:

public string ReverseMapPath(string path)
{
    string appPath = Server.MapPath("~");
    return string.Format("~{0}", path.Replace(appPath, "").Replace("\\", "/"));
}

...

imagesModel.ImageList.Add(ReverseMapPath(item));
基本上,
ReverseMapPath
函数将给定的文件系统路径转换为应用程序虚拟路径。 例如:

D:\Web\MyApp\Upload\u Files\User123\Holiday\意大利人.jpg

翻译成

~/Upload\u Files/User123/Holiday/意大利人.jpg


只是想知道为什么框架中还没有这样的功能。

如果您需要映射目标目录或其子目录中的图像,那么我建议:

public string ReverseMapPath(string path)
{
    string appPath = Server.MapPath("~");
    return string.Format("~{0}", path.Replace(appPath, "").Replace("\\", "/"));
}

...

imagesModel.ImageList.Add(ReverseMapPath(item));
基本上,
ReverseMapPath
函数将给定的文件系统路径转换为应用程序虚拟路径。 例如:

D:\Web\MyApp\Upload\u Files\User123\Holiday\意大利人.jpg

翻译成

~/Upload\u Files/User123/Holiday/意大利人.jpg


只是想知道为什么框架中还没有这样的函数。

我认为没有包括它,因为从web应用程序中获取路径不是一种好的做法,正确的方法是什么?ASP.Net允许将虚拟路径转换为物理路径,我看不出有什么理由不实现物理路径。我可以看到获取单个文件夹的映射路径的用法,但不能枚举该文件夹。我肯定有些情况我不知道