使用ASP.MVC 4中的上传文件更新图像

时间:2012-08-05 19:22:09

标签: c# asp.net-mvc visual-studio-2010

我有30张图片,旁边有一个上传按钮。

当您选择新图像并按更新时,它应删除旧图像并使用相同的名称和路径保存新图像。

我这样做:

string path = "~/Pics/Image1.jpg";
System.IO.File.Delete(Server.MapPath(path));
uploadfile.SaveAs(path);

它有效,我可以看到我保存所有图像的文件夹中的更改,但在浏览器中我看到旧图像,我需要删除我的缓存才能看到新图像。

有没有办法可以更新我的图像并显示新图像而不从浏览器中删除缓存?

2 个答案:

答案 0 :(得分:2)

这是您怀疑的浏览器缓存问题。您可以做的是在这些行中添加查询字符串值,以便浏览器必须重新加载文件。

最终结果为image.jpg?image=randomNumber

我通常通过javascript执行此操作,您可以使用generating-random-numbers-in-javascript-in-a-specific-range来帮助您解决这个问题。

现在只是作为一个注释,你只是将查询字符串添加到图像标记的源代码,以防万一我不清楚。

答案 1 :(得分:2)

您需要更改http标头Last-Modified,以便浏览器识别更改图像并下载新图像。您的回答显然是正确的。

var headerValue = Request.Headers['If-Modified-Since'];
if (headerValue != null)
{
    var modifiedSince = DateTime.Parse(headerValue).ToLocalTime();
    // Insert date of your file change
    if (modifiedSince >= dateOfFileChanged)
    {
        return new HttpStatusCodeResult(304, "Page has not been modified");
    }
}

// page has been changed.
// generate a view ...

// .. and set last modified in the date format specified in the HTTP rfc.
Response.AddHeader('Last-Modified', dateOfFileChanged.
                                ToUniversalTime().ToString("R"));

此代码摘自此问题Last-Modified Header in MVC