【问题标题】:ASPNET Core img src wildcards for image extension用于图像扩展的 ASPNET Core img src 通配符
【发布时间】:2016-03-13 16:58:42
【问题描述】:

我已经在我的项目的wwwroot 中上传了图片,它们的名称与产品的名称相匹配(存储在数据库中)。现在我想在我的视图中显示它们,但不知道它们的扩展名,因为用户将能够上传任何类型的图像文件。他们是否有任何通配符或任何其他技术来解决这个问题?我的代码是:

@foreach (var item in Model) {
    <tr>
      <td>
        <img src="~/Uploads/Images/@(item.ProductName)/@(item.ProductName).png" alt="@(item.ProductName+" - "+item.ProductDescription)" />
        @Html.DisplayFor(modelItem => item.Category.CategoryName)
      </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProductDescription)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProductName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProductPrice)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.QuantityOnHand)
        </td>
        <td>
            <a asp-action="Edit" asp-route-id="@item.ProductID">Edit</a> |
            <a asp-action="Details" asp-route-id="@item.ProductID">Details</a> |
            <a asp-action="Delete" asp-route-id="@item.ProductID">Delete</a>
        </td>
    </tr>
}

【问题讨论】:

  • 除了@esiprogrammer 的建议之外,您无能为力。无论如何,考虑一种不同的方法:当用户上传图像时,将稍后下载文件所需的信息存储在数据库中:(包括下载的文件名和扩展名)我通常有一个“上传”表,我在其中保存一个唯一的 id 和完整的文件名。之后,您需要将上传文件的 id 存储在 product 表中,并选择最佳的文件存储方式(所有文件在同一个文件夹中,一个文件夹用于 product 甚至将文件存储在 db blob 中)
  • 谢谢@GianPaolo 会试一试。

标签: c# asp.net asp.net-mvc razor kestrel-http-server


【解决方案1】:

我不确定这是不是最好的方法,但您也可以 GetAll 文件(在您的情况下应该只有一个文件)然后找到扩展名

 var imagesDirectory = Server.MapPath("/Uploads/Images/" + item.ProductName);
 var files = Directory.GetFiles(imagesDirectory,"*"+item.ProductName+"*");

 var extension = Path.GetExtension(files[0]);

【讨论】:

  • 兄弟不能使用Server.MapPath,它已被弃用。其次,我将在项目中使用多种类型的文件(.doc、.docx、.xlsx、.xls),以防检索这样的文件会变得很麻烦。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
相关资源
最近更新 更多