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
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).
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem problem könnte der folgende sein:
Was ist, wenn die stream-Länge ist mehr als Int32.MaxValue, wie es ein Int64? Vielleicht sind Sie mit dem abschneiden Ihrer Bild... diese Methode verwenden, anstatt zu Lesen, dem stream in einen Puffer:
Geben Sie mir eine minute und ich es auf Ihren code...
Hmm, wo habe ich gesehen, dass der code vor?
funktioniert der upload-code ein problem haben? es ist nicht mit anzeigeteil mit Speicher-stream? das ist oben erwähnt?
Was meinst du?
InformationsquelleAutor Tommaso Belluzzo