Chủ Nhật, 2 tháng 5, 2010

Ảnh trong ASP.NET (C#)


Cách chèn ảnh vào Database và hiển thị nội dung ảnh từ file ra.


Cách chèn ảnh vào Database (chú ý phần in đậm):

using System.IO;

....

string filePath = @"c:\myPhoto.jpg"

FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);

BinaryReader br = new BinaryReader(fs);

byte[] photo = br.ReadBytes((int)fs.Length);

//Thiết lập kết nối đến csdl Northwind

SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;");

SqlCommand addEmp = new SqlCommand("INSERT INTO Employees (LastName, FirstName, Title, HireDate, ReportsTo, Photo) " + "Values(@LastName, @FirstName, @Title, @HireDate, @ReportsTo, @Photo)", nwindConn);

addEmp.Parameters.Add("@LastName", SqlDbType.NVarChar, 20).Value = lastName;

addEmp.Parameters.Add("@FirstName", SqlDbType.NVarChar, 10).Value = firstName;

addEmp.Parameters.Add("@Title", SqlDbType.NVarChar, 30).Value = title;

addEmp.Parameters.Add("@HireDate", SqlDbType.DateTime).Value = hireDate;

addEmp.Parameters.Add("@ReportsTo", SqlDbType.Int).Value = reportsTo;

//Nội dung trường ảnh

addEmp.Parameters.Add("@Photo", SqlDbType.Image, photo.Length).Value = photo;

nwindConn.Open();

addEmp.ExecuteNonQuery();

nwindConn.Close();

Dưới đây là method đọc nội dung ảnh từ file ra(dưới dạng bytes) sau đó ghi xuống file. Method trả về tên file ảnh vừa ghi ra đĩa.

Phương thức có một parameter là id của record cần đọc ảnh.

public string ReadPhoto(int id)
{
string filename;
FileStream fs;
BinaryWriter bw;

filename = "photo" + id + ".jpg";
SqlCommand cmd = new SqlCommand("select profilephoto from profiles where profileid="+id,_con);
_con.Open();
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
//FileStream fs = new FileStream(filename,FileMode.OpenOrCreate,FileAccess.Write);
//BinaryWriter bw = new BinaryWriter(fs);

int bufferSize = 100; // Size of the BLOB buffer.
byte[] outbyte = new byte[bufferSize]; // The BLOB byte[] buffer to be filled by GetBytes.
long retval; // The bytes returned from GetBytes.
long startIndex = 0; // The starting position in the BLOB output.

while (reader.Read())
{
// Get the publisher id, which must occur before getting the logo.
//pub_id = myReader.GetString(0);

// Create a file to hold the output.
fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write);
bw = new BinaryWriter(fs);

// Reset the starting byte for the new BLOB.
startIndex = 0;

// Read the bytes into outbyte[] and retain the number of bytes returned.
retval = reader.GetBytes(0, startIndex, outbyte, 0, bufferSize);

// Continue reading and writing while there are bytes beyond the size of the buffer.
while (retval == bufferSize)
{
bw.Write(outbyte);
bw.Flush();

// Reposition the start index to the end of the last buffer and fill the buffer.
startIndex += bufferSize;
retval = reader.GetBytes(0, startIndex, outbyte, 0, bufferSize);
}

// Write the remaining buffer.
bw.Write(outbyte, 0, (int)retval - 1);
bw.Flush();

bw.Close();
fs.Close();
}
reader.Close();
_con.Close();
return filename;
}

Nguồn: Nguyễn Khánh _dot.net

0 nhận xét:

Đăng nhận xét