【发布时间】:2012-05-12 01:09:14
【问题描述】:
我在使用 ASP.NET 中的文件时遇到了图像缓存问题。我的详细解决方案是:
对于第一个请求:我检查图像文件不存在并将图像文件写入硬盘。之后将文件的url返回给浏览器
对于后面的请求:该函数只是将文件的url返回给浏览器
我的问题是:有时第一次请求时,浏览器无法从 url 获取图像数据并导致 404 - File Not Found 错误。我认为这可能是因为文件已写入但尚未准备好从浏览器中检索,但在代码中我对位图和图形对象同时使用“using 语句”和“Dispose 方法”,以确保一切都准备好从浏览器访问。
更详细地说,我使用的是与 NopCommerce 中类似的解决方案:
lock (s_lock) { ...........
using (var stream = new MemoryStream(LoadPictureBinary(picture))) {
using(var b = new Bitmap(stream)){
using(var newBitMap = new Bitmap(newSize.Width, newSize.Height)){
.......................
newBitMap.Save(
Path.Combine(this.LocalThumbImagePath, localFilename), ici, ep);
}
}
}
} // end lock
return url;
更多信息:您可以在http://nopcommerce.codeplex.com/SourceControl/changeset/view/9125b9a7fafe#src%2fLibraries%2fNop.Services%2fMedia%2fPictureService.cs查看完整代码(请搜索GetPictureUrl()函数)
【问题讨论】:
-
"将文件的 url 返回给浏览器" - 是 302 重定向吗?或者您的“第一个请求”是指对其他页面的请求,而不是对图像的请求?
-
您没有发布足够的代码来诊断为什么第一个请求返回的 URL 没有准备好图像。您要询问的错误在您剪掉的代码中。也就是说,正如@Aristos 的回答中提到的那样,您在这里有一个主要的线程错误。
-
嗨,克里斯,我在问题中添加了指向完整源代码的链接。有时间请查看。提前致谢。
标签: c# asp.net http-status-code-404