Url.Content
帮助程序方法为您的文件提供虚拟内容路径并返回一个url来访问您网站中的文件。您不应该将物理目录位置传递给该位置。
您可能会考虑将图像保存在您的网络应用程序中。创建一个名为“Images”的目录,然后你可以安全地使用Url.Content方法。
例如,
@foreach (var imgPath in Directory.GetFiles(Server.MapPath(Url.Content("~/Images/"))))
{
<img src="@Url.Content("~/Images/"+ @Path.GetFileName(imgPath))" />
}
,或者如果你确实需要在一些地方保存应用程序根目录外的图像(例如:“C:\ TEMP \图像或网络位置),你可能会考虑创建一个这需要的文件名操作方法,从位置读取该文件,并返回为图像。
public ActionResult GetImg(string id)
{
var path = [email protected]"C:\temp\images\{id}.png";
var bytes = System.IO.File.ReadAllBytes(path);
return File(bytes, "image/png");
}
现在,你只需要调用这个终点,并用其作为图像的src属性。
@foreach (var imgPath in Directory.GetFiles(@"C:\temp\images", "*.*"))
{
<img src="@Url.Action("GetImg",new {id=Path.GetFileNameWithoutExtension(imgPath)})" />
}
以上是一个简单的解决方案,我硬编码它返回PNG文件。你可以更新它以更灵活(增加一个参数来接受文件扩展名)
注意:我个人更喜欢在剃须刀文件中保留最小的C#。我喜欢将C#代码(所有这些Directory.GetFiles
行)移动到GET操作,并通过视图模型/视图包(根据需要)将图像名称列表传递到视图。
你的文件夹需要是相对/虚拟路径(使用'Server.MapPath()'),'me'可以根据用户的ID生成。 –
@StephenMuecke我有这种感觉,但是我怎样才能将虚拟路径映射到物理路径呢?如果我在Visual Studio中创建一个新文件夹,它会自动创建它的路径。 –
首先在应用程序中为文件创建一个文件夹,称为“用户”。那么对于每个用户,您可以通过编程方式添加基于唯一标识的子文件夹(可能在注册时)。然后你可以使用Server.MapPath()获取文件夹的绝对路径--Server.MapPath(“〜/ Users/User1”)' –