konvertieren byte[] zu Bild

Ich habe ein Bild hochgeladen in meiner Datenbank als byte[] und jetzt im Versuch, um es anzuzeigen.

Es wurde ein Fehler - Argument Exception wurde unhandled by user code Parameter is not valid

In dieser Zeile

newImage = System.Drawing.Image.FromStream(stream);

Hier meine codes

for (int i = 0; i < topRatingList.Count; i++)
            {
                int commentRating = topRatingList[i].CommentRating;
                int drinkID = topRatingList[i].DrinkID;

                if (i == 0)
                {
                    DrinkMenuDAO drink = DrinkMenuBLL.getDrinkMenu(drinkID);
                    LinkButton1.Text = drink.DrinkName; 
                    ImageButton1.ImageUrl = byteArrayToImage(drink.DrinkImage);
                }
            }


private string byteArrayToImage(byte[] byteArrayIn)
    {
        System.Drawing.Image newImage;
        string strFileName = Server.MapPath("~/Temp/images/") + ".jpg";
        if (byteArrayIn != null)
        {
            using (MemoryStream stream = new MemoryStream(byteArrayIn))
            {
                newImage = System.Drawing.Image.FromStream(stream);
                newImage.Save(strFileName);
            }
            return strFileName;
        }
        else
        {
            return "";
        }
    }

den code, den ich verwendet, um das Bild zu speichern

protected void bn_upload_Click(object sender, EventArgs e)
    {
        lbl_msg.Text = "";
        Stream imgStream = FileUpload1.PostedFile.InputStream;
        BinaryReader imgBinary = new BinaryReader(imgStream);
        bytes = imgBinary.ReadBytes((Int32)imgStream.Length);
        imgBinary.Close();
        imgStream.Close();
        string src = byteArrayToImage(bytes);
        if (src.Equals(""))
        {
        }
        else
        {
            Image1.ImageUrl = "~/Temp/UploadedImage.jpg";
        }
    }

    private string byteArrayToImage(byte[] byteArrayIn)
    {
        System.Drawing.Image newImage;
        string strFileName = Server.MapPath("~/Temp/") + "UploadedImage.jpg";
        if (byteArrayIn != null)
        {
            using (MemoryStream stream = new MemoryStream(byteArrayIn))
            {
                newImage = System.Drawing.Image.FromStream(stream);
                newImage.Save(strFileName);
            }
            return strFileName;
        }
        else
        {
            return "";
        }
    }

    protected void btn_submit_Click(object sender, EventArgs e)
    {
        DrinkMenuBLL.uploadImg(bytes);
        lbl_msg.Text = "uploaded";
    }

Ich verwendet varbinary(MAX) in der Datenbank und das sql, dass ich

public static void UploadImg(byte[] drinkImage)
    {

        SqlConnection con = new SqlConnection(Constring.getConString());

        string sql = "Update DrinkMenu set drinkImage = (@imgData) where drinkID = 4";

        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.Parameters.Add("@imgData", SqlDbType.Binary).Value = drinkImage;
        try
        {
            con.Open();
            cmd.ExecuteNonQuery();
        }
        finally
        {
            con.Close();
            cmd.Dispose();
            con.Dispose();
        }
    }
Sind Sie sicher, dass Ihre byte[] stellt das Bild korrekt? Können wir sehen, den code, speichert ihn ab?
bytes = imgBinary.ReadBytes((Int32)imgStream.Länge); ist Dies nicht ein guter Weg, um eine Datei Lesen. Jon Skeet ist eine gute Antwort hier: stackoverflow.com/questions/221925/... (er verwendet, um eine ausgezeichnete blog-post diskutiert verschiedene Methoden, aber ich kann es nicht finden).

InformationsquelleAutor sihao | 2013-01-16

Schreibe einen Kommentar