大家好我的代码有问题,我将图像保存为varbinary ok,但我希望图像在从文件上传中选择时显示在图片框中,但我一直在收到错误,是否可能?我正在使用c#和asp.net。我一直在搜索,但似乎无法让代码在我的源代码上运行。
using System;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web.UI.WebControls;
using System.IO;
using System.Drawing;
public partial class Mensagem : System.Web.UI.Page
{
protected void BtnUploadClick(object sender, EventArgs e)
{
string filePath = Server.MapPath(upload1.FileName);
string filename = Path.GetFileName(filePath);
string ext = Path.GetExtension(upload1.PostedFile.FileName);
Stream fs = upload1.PostedFile.InputStream;
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
string dt = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss");
SqlConnection conn = new SqlConnection("Data Source=Microsoft SQL Server (SqlClient);Server=NEVETS-LAPTOP\\NEVETS;Initial Catalog=Forum;uid=sa;pwd=sql;Connect Timeout=10;TrustServerCertificate=True ");
conn.Open();
SqlCommand sqlCommand = conn.CreateCommand();
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.CommandText = "usp_inserirFicheiro";
sqlCommand.Parameters.AddWithValue("@nome", SqlDbType.VarChar).Value = filename;
sqlCommand.Parameters.AddWithValue("@tamanho", SqlDbType.VarBinary).Value = bytes;
sqlCommand.Parameters.AddWithValue("@formato", SqlDbType.VarChar).Value = ext;
sqlCommand.Parameters.AddWithValue("@data", SqlDbType.DateTime).Value = dt;
sqlCommand.Parameters.AddWithValue("@ficheiro", SqlDbType.VarBinary).Value = br;
sqlCommand.ExecuteNonQuery();
txtnome.Text = "sucesso";
conn.Close();
}
protected void Button2_Click(object sender, EventArgs e)
{
//upload1.SaveAs(Server.MapPath("~/imgs/" + upload1.FileName).ToString());
//pbficheiro.ImageUrl = @"~/imgs/" + upload1.FileName;
Byte[] ba = new BinaryReader(upload1.PostedFile.InputStream).ReadBytes((Int32)upload1.PostedFile.InputStream.Length);
using (MemoryStream ms = new MemoryStream(ba, false))
{
Image imgTmp = Image.FromStream(ms);
Bitmap bm = new Bitmap(imgTmp.Width, imgTmp.Height);
Graphics g = Graphics.FromImage(bm);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
Rectangle rect = new Rectangle(0, 0, imgTmp.Width, imgTmp.Height);
g.DrawImage(imgTmp, rect, 0, 0, imgTmp.Width, imgTmp.Height, GraphicsUnit.Pixel);
using (MemoryStream ms2 = new MemoryStream())
{
bm.Save(ms2, imgTmp.RawFormat);
bm.Dispose();
imgTmp.Dispose();
if (WantAnImage)
return Image.FromStream(ms2);
else (WantBytes)
ms2.ToArray();}
}
}
}
答案 0 :(得分:0)
如果错误与内存有关,则可能是因为当此方法退出时,图像数据将与Stream对象一起处理。尝试将其捕获到中间Bitmap对象中,然后将该Bitmap分配给PictureBox图像属性。
这是一个可能有用的链接:
Saving Image to MemoryStream- Generic GDI+ Error
最终,这被引用作为信息来源:
http://msdn.microsoft.com/en-us/library/z7ha67kw
修改强>
我不知道什么类型的“upload1”或它的范围,但假设它是一个本地对象,我想知道这种方法(这将是你调用以检索字节[]或图像的方法) :
protected void Button2_Click(object sender, EventArgs e)
{
//upload1.SaveAs(Server.MapPath("~/imgs/" + upload1.FileName).ToString());
//pbficheiro.ImageUrl = @"~/imgs/" + upload1.FileName;
Byte[] ba = new BinaryReader(upload1.PostedFile.InputStream).ReadBytes((Int32)upload1.PostedFile.InputStream.Length);
using (MemoryStream ms = new MemoryStream(ba, false))
{
System.Drawing.Image imgTmp = System.Drawing.Image.FromStream(ms);
Bitmap bm = new Bitmap(imgTmp.Width, imgTmp.Height);
Graphics g = Graphics.FromImage(bm);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
Rectangle rect = new Rectangle(0, 0, imgTmp.Width, imgTmp.Height);
g.DrawImage(imgTmp, rect, 0, 0, imgTmp.Width, imgTmp.Height, GraphicsUnit.Pixel);
bm.Save(Server.MapPath("~/imgs/" + upload1.FileName).ToString());
pbficheiro.ImageUrl = @"~/imgs/" + upload1.FileName;
}
}