我有一个网站,其中包含一些产品类别页面,这些页面在“数据列表”中的“项目模板”中提供图像。抓取图像,如下所示:
<a href='<%#"/ProductPage.aspx?item="+Eval("Id")+"&cat="+Eval("Cat") %>'</a>
<asp:Image ID="Image1" class="imageViewer" runat="server"
ImageUrl='<%#"../Handlers/getImage.ashx?Id="+Eval("PhotoId") %>' />
</a>
依次调用getImage.ashx处理程序,其外观如下:
public void ProcessRequest(HttpContext context)
{
Int32 my_Id;
if (context.Request.QueryString["Id"] != null)
{
my_Id = Convert.ToInt32(context.Request.QueryString["Id"]);
context.Response.ContentType = context.Request.QueryString["Type"];
Stream strm = ShowEmpImage(my_Id);
byte[] buffer = new byte[4096];
int byteSeq = strm.Read(buffer, 0, 4096);
while (byteSeq > 0)
{
context.Response.OutputStream.Write(buffer, 0, byteSeq);
byteSeq = strm.Read(buffer, 0, 4096);
}
}
}
public Stream ShowEmpImage(int my_Id)
{
string conn = ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString;
SqlConnection connection = new SqlConnection(conn);
try {
SqlCommand cmd = new SqlCommand("[dbo].[GetImageHandler]", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Id", my_Id);
connection.Open();
object img = cmd.ExecuteScalar();
connection.Close();
return new MemoryStream((byte[])img);
} catch (Exception ex)
{
connection.Close();
return new MemoryStream();
}
}
当我将图像存储在数据库中时,这一直很好。直到深夜,所有图像突然间断断续续地出现403错误。链接到我的网站和相关页面:https://moneta.ggiww.com/ProductCategories?cat=Special%20Order
我没有更改任何权限,或对此网站没有做任何更改。它在asp.net网站的服务器间共享主机计划中。所有其他站点都在做同一件事。如果您重新加载页面并单击左右,则图像会更改是否加载。我不知道为什么这一切都是突然发生的。我愿意接受所有建议;如果有的话,我什至会重新创建处理程序。 (尽管它总是像我之前所说的那样起作用,但这一切突然开始发生了)
忘记提及这些站点在调试时可以在我的本地环境中正常工作。
在第一条评论中,我尝试将其更改为绝对URL,但仍然存在问题:
<asp:Image ID="Image1" class="imageViewer" runat="server"
ImageUrl='<%#"https://moneta.ggiww.com/Handlers/getImage.ashx?
Id="+Eval("PhotoId") %>' />