HttpHandlerを介して出力ストリームに画像を出力しようとしていますが、ArgumentExceptionがスローされ続けます。私は問題をグーグルで検索し、多くのことを試しましたが、それでも問題を解決できませんでした。とにかく、ここにコードがあります:
public void ProcessRequest(HttpContext context)
{
Int32 imageId = context.Request.QueryString["id"] != null ?
Convert.ToInt32(context.Request.QueryString["id"]) : default(Int32);
if (imageId != 0)
{
//context.Response.ContentType = "image/jpeg";
Byte[] imageData = this._imageInfoManager.GetTradeMarkImage(imageId);
using (MemoryStream ms = new MemoryStream(imageData, 0, imageData.Length))
{
using (Image image = Image.FromStream(ms, true, true)) //this line throws
{
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
}
}
throw new ArgumentException("Image could not be found.");
}
imageDataバイト配列は空ではなく、メモリストリームは正しくいっぱいになっていることに注意してください。何かご意見は?
更新:
コードは次のとおりGetTradeMarkImage
です...画像はSQLServerデータベースに次のimage
形式で保存されていることに注意してください。
public Byte[] GetTradeMarkImage(Int32 id)
{
object result = DB.ExecuteScalar(SqlConstants.SqlProcedures.Request_GetImageById, id);
if (result != null)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, result);
return ms.ToArray();
}
}
return null;
}