111,126
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 以二进制形式存取图片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
try
{
this.pictureBox1.Image = Image.FromStream(this.openFileDialog1.OpenFile());
string str = openFileDialog1.FileName.ToString();
//将指定路径的文件添加到FileStream类中
FileStream fs = new FileStream(str, FileMode.Open, FileAccess.Read);
//通过FileStream类对象实例化BinaryReader类
BinaryReader br = new BinaryReader(fs);
//通过BinaryReader类对象的ReadBytes()方法将FileStream类对象转化为二进制数组
imgBytesIn = br.ReadBytes((int)fs.Length);
//MessageBox.Show(imgBytesIn.ToString());
}
catch
{
MessageBox.Show("您选择的图片不能被读取或文件类型不对!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.pictureBox1.Image = null;
}
}
string tablename = "cpic";
private void btAddPic_Click(object sender, EventArgs e)
{
//new Db().InsertInfo_Clpic(cph, imgBytesIn);
if (this.pictureBox1.Image == null)
{
return;
}
new Db().InsertInfo_Clpic(tablename,cph, imgBytesIn);
new Db().CloseConnection();
btAddPic.Enabled = false;
MessageBox.Show("添加成功!");
btUpPic.Enabled = true;
btDelPic.Enabled = true;
}
int fileId;
//如果传过来的参数能转换成数字
if (int.TryParse(Request.QueryString["FileID"], out fileId))
{
string sql = "select Mime,FileData from FileList where FileID=@FileID";
//SqlDbHelper是我们自己编写的数据库通用类
SqlDbHelper helper = new SqlDbHelper(ConfigurationManager.ConnectionStrings["Conn"].ConnectionString);
SqlParameter[] parameters = new SqlParameter[1];
parameters[0] = new SqlParameter("@FileID", SqlDbType.Int, 4);
parameters[0].Value = fileId;
SqlDataReader reader = helper.ExecuteReader(sql,CommandType.Text,parameters);
byte[] data = null;
string mime = string.Empty;
//如果存在图片记录,所以按编号查询最多只有一条记录
//这里就用if判断而不用while循环
if (reader.Read())
{
//将数据库中的image字段保存的数据转换成byte[]
data = (byte[])(reader["FileData"]);
mime = (string)(reader["mime"]);
}
reader.Close();//读取数据之后及时关闭Reader对象
if (data != null && data.Length > 0)
{
Response.Clear();//清空所有输出
Response.ContentType = mime;//设置MIME为图象对应的MIME
//因为不存在直接将byte[]转换成图象的方法
//所以利用byte[]来构建内存流对象
MemoryStream memoryStream = new MemoryStream(data);
//利用流对象构建Bitmap对象
Bitmap image = new System.Drawing.Bitmap(memoryStream);
//将Bitmap保存到Response对象的输出流当中
image.Save(Response.OutputStream, ImageFormat.Jpeg);
image.Dispose();//释放Bitmap对象
Response.End();
}
}