4

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

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

我这样做:

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

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

有什么方法可以在不从浏览器中删除缓存的情况下更新我的图像并显示新图像?

4

2 回答 2

3

您需要更改 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中提取的。

于 2012-08-05T19:38:06.197 回答
2

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

最终结果将是image.jpg?image=randomNumber

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

现在就像一个注释一样,您只是将查询字符串添加到图像标记的源中,以防我不清楚。

于 2012-08-05T19:25:34.313 回答