【问题标题】:File management for profile pictures档案照片的档案管理
【发布时间】:2013-09-07 00:00:40
【问题描述】:

我正在构建一个 ASP.NET 网站,用户可以在其中上传他们的个人资料图片。我将这些图像存储在 App_Data 文件夹下,并将文件路径存储在用户表中。

那么,问题是我应该如何更新用户的头像?我的意思是,如果我覆盖了以前的文件,同时收到了获取图片的请求,会发生什么。我应该有一些并发管理吗? 我最好的解决方案是为新图像生成一个文件名(数据库中的用户记录也将使用这个新路径进行更新)并将旧路径存储在其他地方,以便稍后将其删除。 这是一个好主意吗?

【问题讨论】:

  • 我认为图像会变成空白。我不认为会有问题。如果有,您可以使用新的随机文件名(例如 GUID)上传图像,然后更新数据库表。然后你可以删除旧图像。
  • 是的,这也是我的想法。

标签: c# asp.net asp.net-mvc image-processing concurrency


【解决方案1】:

在我的情况下我通常会做什么。

  1. 在我的项目中创建一个文件夹,路径为 ~/uploads/images。这里的 images 是我关心的文件夹,它在 uploads 下,uploads 在根目录下。

  2. 将图像路径保存到数据库时,我使用简单

    var dbpath= string.Format("~/Uploads/Images/{0}",Guid.NewGuid().ToString().Replace("-",string.Empty));

  3. 还有来自文件上传控制Fu.SaveAs(Server.MapPath(dbPath));

如果您想在页面上显示来自数据库的图像,您可以使用

  1. <asp:Image runat="server" id="immm"></asp:Image> , from code behind imm.ImageUrl = dt.Rows[0]["ImagePath"].ToString"

2.如果它在网格/中继器内部,只需使用<asp:Image runat="server" id="immm" ImageUrl='<%#Eval("ImagePath")%'></asp:Image>

【讨论】:

    【解决方案2】:

    无需生成新文件名。有一个非常聪明的解决方案。

    更改您的用户表并添加一个 Uploadversion 字段。并用上传的文件覆盖相同的文件,并在您的用户表中增加一个上传版本字段。

    当您的客户端请求文件时,请发送此版本的路径。客户可能会将此版本作为假查询字符串添加到您的 img 元素的 src 路径中。

    <img src="/[image_route]?[version]" />
    

    例如:

    <img src="/images/john_doe/photo?16" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 2014-10-22
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多