0

私のasp.net-MysqlアプリケーションはWindowsServerでホストされていますが、admin.aspxページからmysqlテーブルに画像を挿入しようとすると、エラーが表示されます

"オブジェクト参照がオブジェクト インスタンスに設定されていません。"

しかし、私のVSから、エラーなしでローカルmysqlサーバーにイメージを挿入できます。

webadminから画像を挿入すると、正常に挿入され、Webサイトに画像が表示されます。admin.aspxを使用してコンテンツを更新できますが、画像を更新または挿入しようとすると、エラーが発生します。

[NullReferenceException: Object reference not set to an instance of an object.]
   Lavande.DBconnect.addimagehome(Byte[] image, String Content, String arabiccontent) in C:\Users\user\Desktop\Lavande_Asp\Lavande\Lavande\DBconnect.cs:33
   Lavande.abklavande900.button_savehome_Click(Object sender, EventArgs e) in C:\Users\user\Desktop\Lavande_Asp\Lavande\Lavande\abklavande900.aspx.cs:84
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

アップロードされたファイルを読み取るためのコードは次のとおりです。

 string path = System.IO.Path.GetFullPath(FileUpload_home.PostedFile.FileName);
Byte[] image = WM.ImageSetting("watermarkname", Server.MapPath("upload/") + "logo1.png", path);
DB.addimagehome(image, contentsend, arabiccontent);

ウォーターマーククラス。

public class watermark
{
    public Byte[] ImageSetting(string wmText, string wmImage, string mainImage)
    {
        byte[] imageBytes = null;
        if (File.Exists(mainImage))
        {

            System.Drawing.Image image = System.Drawing.Image.FromFile(mainImage);

            Graphics graphic;
            if (image.PixelFormat != PixelFormat.Indexed && image.PixelFormat != PixelFormat.Format8bppIndexed && image.PixelFormat != PixelFormat.Format4bppIndexed && image.PixelFormat != PixelFormat.Format1bppIndexed)
            {
                // Graphic is not a Indexed (GIF) image
                graphic = Graphics.FromImage(image);
            }
            else
            {
                /* Cannot create a graphics object from an indexed (GIF) image.
                 * So we're going to copy the image into a new bitmap so
                 * we can work with it. */
                Bitmap indexedImage = new Bitmap(image);
                graphic = Graphics.FromImage(indexedImage);

                // Draw the contents of the original bitmap onto the new bitmap.
                graphic.DrawImage(image, 0, 0, image.Width, image.Height);
                image = indexedImage;
            }
            graphic.SmoothingMode = SmoothingMode.AntiAlias & SmoothingMode.HighQuality;

            //Text Watermark properties
            Font myFont = new Font("segoe script", 17, FontStyle.Bold);
            SolidBrush brush = new SolidBrush(Color.FromArgb(40, Color.White));
            SizeF textSize = new SizeF();
            if (wmText != "")
                textSize = graphic.MeasureString(wmText, myFont);

            //Image Watermark
            System.Drawing.Image ig = null;
            if (wmImage != "")
                ig = System.Drawing.Image.FromFile(wmImage);

            // Write the text watermark and image watermark across the main image.
            for (int y = 0; y < image.Height; y++)
            {
                for (int x = 0; x < image.Width; x++)
                {
                    PointF pointF = new PointF(x, y);
                    PointF pointFm = new PointF(x, y+150);
                    if (wmText != "")
                    {
                        graphic.DrawString(wmText, myFont, brush, pointFm);
                        x += Convert.ToInt32(textSize.Width);
                    }
                    if (wmImage != "")
                    {
                        graphic.DrawImage(ig, pointF);
                        x += Convert.ToInt32(ig.Width);
                    }
                }
                if (wmText != "")
                    y += Convert.ToInt32(textSize.Height);
                if (wmImage != "")
                    y += Convert.ToInt32(ig.Height);

            }

            using (MemoryStream memoryStream = new MemoryStream())
            {
                // save image in memoryStream with it format which get it from GetImageFormat function
                image.Save(memoryStream, GetImageFormat(mainImage));
                imageBytes = memoryStream.ToArray();
            }
            graphic.Dispose();
        }


        return imageBytes;


    }

    //function to return Image Format
    ImageFormat GetImageFormat(String path)
    {
        switch (Path.GetExtension(path).ToLower())
        {
            case ".bmp": return ImageFormat.Bmp;
            case ".gif": return ImageFormat.Gif;
            case ".jpg": return ImageFormat.Jpeg;
            case ".png": return ImageFormat.Png;
            default: return null;
        }
    }

}

}

4

2 に答える 2

0

スタックトレースとそれが指すコードに基づいて、imageそこにある変数はnullである必要があります。プロパティを見ようとすると例外がスローされLengthます...そのプロパティをチェックするために使用するオブジェクトはありません。

nullである理由は、ImageSetting()関数を次のように要約できるためです。

Byte[] ImageSetting(...)
{
    Byte[] imageBytes = null;
    if (File.Exists(...) )
    {
        //...
    }
    return imageBytes;
}

明らかに、File.Exists()呼び出しは失敗するため、画像は返されません。代わりにロードして使用できるプレースホルダー画像が必要になる可能性があります。また、ファイルシステムは揮発性であるため、そもそもそのようなFile.Exists()を使用しないでください。代わりに、コーディング作業を例外ハンドラーに入れてください。

于 2012-12-01T15:52:31.160 に答える
0

コメントで書いたように、プールIDにはディレクトリにアクセスする権限がないため、サーバーから画像を取得できません。

画像を含むディレクトリのアクセス権をすべての人に設定すると、機能する可能性があります(テスト目的のみ)。

于 2012-12-01T15:53:39.087 に答える