0

これが私のコードです:

HTML:<img src="thumbCreate.ashx?Id=223" alt="asd" />

HTTPハンドラー: `

public void ProcessRequest (HttpContext context)
    {
        CreateThumbNail(context);
    }
private void CreateThumbNail(HttpContext context)
{
        string resourceId = context.Request.QueryString["Id"];
        context.Response.Write("No resource found for Id = " + resourceId);
        Bitmap original = new Bitmap("C:/Devp/My work/ASHXSampleApp/Images/Desert.jpg");
        int oWidth = original.Width;
        int oHeight = original.Height;

        int preferredWidth = 80;
        int preferredHeight = 100;

        int thumbWidthFactor = oWidth / preferredWidth;
        int thumbHeightFactor = oHeight / preferredHeight;

        int maxFactor = Math.Max(thumbWidthFactor, thumbHeightFactor);

        int thumbNailWidth = oWidth / maxFactor;
        int thumbNailHeight = oHeight / maxFactor;
        Bitmap thumbNailImage = (Bitmap)original.GetThumbnailImage(thumbNailWidth, thumbNailHeight, ThumbNailCallback, IntPtr.Zero);


        context.Response.ContentType = "image/Jpeg";
        thumbNailImage.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);


}`

ただし、このコードは画像を表示しません。Firefoxでハンドラーを手動で実行しようとすると、エラーが発生します:-「画像「http:// localhost:57157 / ASHXSampleApp / thumbCreate.ashx?Id = 223」にはエラーが含まれているため、表示できません。」何か案が?

4

2 に答える 2

3

問題は、コードのこの部分に起因します。

string resourceId = context.Request.QueryString["Id"];
context.Response.Write("No resource found for Id = " + resourceId);

常に応答ストリームに文字列を追加し、その後に画像データを書き込むと、文字列が破損します。それを削除し(または、エラーなどが発生したときに追加されるように条件付きにします)、機能するはずです。

于 2012-10-05T05:34:31.883 に答える
0

context.Response.WriteFile()は機能しますか?

于 2012-10-05T05:14:38.373 に答える