我无法弄清楚为什么当我尝试输出图像和下面的一行文字时,我只得到图像我做错了什么?
SqlConnection cn = new SqlConnection("CONNECTIONINFO HERE");
SqlCommand cmd = new SqlCommand("SELECT * FROM test WHERE id=" + Request.QueryString["id"], cn);
cn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read()) //check to see if image was found
{
Response.ContentType = dr["fileType"].ToString();
Response.BinaryWrite((byte[])dr["imagesmall"]);
Response.Write("<br/>This is your image, if this is incorrect please contact the administrator.");
}
cn.Close();
答案 0 :(得分:4)
嗯..内容类型可能设置为jpg,gif或其他图像类型。我真的很惊讶浏览器显示图像而不是错误。
重点是,你不能混合响应类型。
如果您必须显示文字,则需要发出常规HTML文件,图片标记显示您的图片以及底部的相关文字。
答案 1 :(得分:3)
您正在将内容类型设置为二进制图像类型。浏览器很可能忽略了文本。如果您希望在响应中同时使用这两种类型,则可能需要使用 text / html 作为响应类型,并使用<img>
标记执行内联图像数据。
有关内联图片数据的示例,请参阅here。
答案 2 :(得分:1)
您不能将二进制响应与html内容响应混合使用。如果您“保存”您的图像,您会在十六进制编辑器中注意到它是二进制图像数据,并且您的小剪切html附加到文件的末尾。
答案 3 :(得分:1)
为您的图片创建一个HttpHandler,并从图片标记中调用它。
像这样:public class ImageHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
HttpRequest request = context.Request;
HttpResponse response = context.Response;
SqlConnection cn = new SqlConnection("CONNECTIONINFO HERE");
SqlCommand cmd = new SqlCommand("SELECT * FROM test WHERE id=" + request.QueryString["id"], cn);
cn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read()) //check to see if image was found
{
response.ContentType = dr["fileType"].ToString();
response.BinaryWrite((byte[])dr["imagesmall"]);
}
cn.Close();
}
}
然后像这样使用它:
<img src="/ImageHandler.axd?id=1" />
<p>This is your image, if this is incorrect please contact the administrator.</p>
如果您正在使用,则需要在web.config或IIS 7中配置处理程序。
答案 4 :(得分:0)
您没有说出ContentType的设置。如果它设置为'jpeg'或类似,那么您输出的HTML将不会被解释为HTML - 它只是更多的二进制数据。