配置文件图片的文件管理

时间:2013-09-03 16:53:49

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

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

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

2 个答案:

答案 0 :(得分:0)

在我的案例中,我通常会这样做。

  1. 使用路径〜/ uploads / images在项目中创建一个文件夹。这里的图片是我关注的文件夹,上传文件和上传文件是root文件。

  2. 将图像路径保存到db时,使用简单的

    var dbpath =     的String.Format(。 “〜/上传/图像/ {0}”,Guid.NewGuid()的ToString()更换( “ - ”,的String.Empty));

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

  4. 如果要在数据库的页面上显示图像,可以使用

    1. <asp:Image runat="server" id="immm"></asp:Image> , from code behind imm.ImageUrl = dt.Rows[0]["ImagePath"].ToString"
    2. 2.如果是内部网格/转发器,只需使用<asp:Image runat="server" id="immm" ImageUrl='<%#Eval("ImagePath")%'></asp:Image>

答案 1 :(得分:0)

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

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

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

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

例如:

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