PDA

View Full Version : Lưu hình ảnh vào database(SQL) trong C#?



namroyal88
13-07-2009, 01:36 AM
Chào Anh Chị !

Em muốn lưu hình ảnh vào trong database thì làm sao hả ac?
em hoàn toàn chưa biết về cái này và đang tìm hiểu! anh chị nào biết thì tận tình chỉ cho em với!
vd: có 1 picturebox và 1 button "lưu"
khi nhap vào button thì hình ảnh trong picturebox được luu vào trong database.

A-c chỉ rõ ràng cho em nhé!
thank!

khanhthuy
13-07-2009, 01:29 PM
lưu vào database thì chỉ lưu url của ảnh thôi bạn ạ! khi upload một ảnh image.jpg vào thư mục FileUpload thì mình lưu url của nó trong csdl là ~/FileUpload/image.jpg.
Cũng có một cách lưu ảnh dưới dạng nhị phân nhưng mình nghĩ lưu theo url hay hơn, khi cần hiển thị ảnh thì mình dựa vào url là lấy được ảnh thôi

sayit
14-07-2009, 02:23 PM
nếu làm cơ sỡ dữ liệu dưới dạng tập trung liệu lưu dưới dạng đường dẫn thì có khả thi không .
hay lúc đó cũng phải dùng Map NetWork để cho nhiều máy cùng tác động tới những file hình ảnh đó

darkan
14-07-2009, 03:44 PM
@khanhthuy : Bạn giải thích hộ Dark xem tại sao dùng "url" lại hay hơn là lưu binary vào database với. Cám ơn bạn.

dieucay555
14-07-2009, 05:00 PM
@khanhthuy : Bạn giải thích hộ Dark xem tại sao dùng "url" lại hay hơn là lưu binary vào database với. Cám ơn bạn.

Theo em nghĩ, lưu bằng đường dẫn(theo bạn này nói là url) chưa chắc đã hay hơn đâu.Lỡ người ta đổi tên thư mục thì sao?

trung
14-07-2009, 07:26 PM
Theo mình biết , trong web ko ai lưu image = binary , mà chỉ lưu url vì load lên sẽ lẹ hơn rất nhiều so với lưu binary .
@dieukay: theo mình đã làm , thì sắp xếp bố cục folder của image phải cố định , nếu người ta sửa tên folder dc ... thì tại sao lại có IP tĩnh và IP động .
1 chút ý kiến nhỏ nhoi.
:D

ducnt
14-07-2009, 08:40 PM
theo mình được biết thì lưu các file image trong database hiện tại là 1 hướng phát triển mới. nó có rất nhiều cấu trúc dữ liệu đi theo (ví như đánh chỉ mục cho cái này có các cấu trúc kdtree, Rtree...).

Theo mình được biết thì bộ ArcGIS nó cũng làm như vậy.

Có 1 số ưu điểm khi bạn lưu các file image trong databse:
- khi dữ liệu của bạn tăng lên nhiều -- > cần 1 cấu trúc tốt hơn cho việc tìm kiếm (cũng giống như là dữ liệu dạng text vậy -- database).
- Cần tốc độ truy xuất dữ liệu nhanh.
- .... vv

khanhthuy
15-07-2009, 01:19 AM
Theo em nghĩ, lưu bằng đường dẫn(theo bạn này nói là url) chưa chắc đã hay hơn đâu.Lỡ người ta đổi tên thư mục thì sao?
Thế này bạn nhé, bạn nghĩ ai có thể đổi tên thư mục được. Trong quá trình xây thiết kế một web thì những cái này là cái cố định rồi, do người lập trình quyết định trong quá trình xây dựng csdl và code. Người sử dụng chỉ có thể thao tác upload và display của mình thôi.
Còn lưu ảnh bằng nhị phận thì mình cũng chưa thử bao giờ, nhưng mình nghĩ cách đó sẽ tốn tài nguyên hơn dùng url đấy. với lại hiện thị một ảnh lưu nhị phân cũng phức tạp hơn nhiều

darkan
15-07-2009, 01:56 PM
@ khanhthuy : Vậy là bạn chưa bao giờ lưu ảnh vào database dưới dạng nhị phân? Theo bạn thì "tốn tài nguyên hơn" là như thế nào. Hiển thị một ảnh lưu nhị phân thì cần những gì "phức tạp hơn rất nhiều" so với lưu đường dẫn?

Dark thấy rất kỳ quặc là các bạn không hiểu rõ việc mình đang làm là gì, ưu nhược điểm là thế nào mà cứ so sánh hồn nhiên, cái này hay hơn cái kia.

dieucay555
15-07-2009, 02:22 PM
Thế này bạn nhé, bạn nghĩ ai có thể đổi tên thư mục được. Trong quá trình xây thiết kế một web thì những cái này là cái cố định rồi, do người lập trình quyết định trong quá trình xây dựng csdl và code. Người sử dụng chỉ có thể thao tác upload và display của mình thôi.
Còn lưu ảnh bằng nhị phận thì mình cũng chưa thử bao giờ, nhưng mình nghĩ cách đó sẽ tốn tài nguyên hơn dùng url đấy. với lại hiện thị một ảnh lưu nhị phân cũng phức tạp hơn nhiều

Chủ topic có bảo là web app đâu bạn(:P).Nếu là web thì mình cũng ko hiểu bạn bảo lưu url là như thế nào,người ta muốn up ảnh lên trang web đó tức là lưu trữ ảnh vào database,chẳng lẽ chỉ lưu đường dẫn T_T
Việc lưu ảnh vào cơ sở dữ liêu thì đâu có gì khó khăn.Bạn chỉ cần tạo 1 mảng byte rồi dùng filestream đưa vào data thôi



// Create a byte[] from the input file
int len = Upload.PostedFile.ContentLength;
byte[] pic = new byte[len];
Upload.PostedFile.InputStream.Read (pic, 0, len);
// Insert the image and comment into the database
SqlConnection connection = new
SqlConnection ("\\chuỗi kết nối");
try
{
connection.Open ();
SqlCommand cmd = new SqlCommand ("insert into Image "
+ "(Picture, Comment) values (@pic, @text)", connection);
cmd.Parameters.Add ("@pic", pic);
cmd.Parameters.Add ("@text", Comment.Text);
cmd.ExecuteNonQuery ();
}
finally
{
connection.Close ();
}

nguoidanongxala
15-07-2009, 06:58 PM
Để lưu ảnh vào cơ sở dữ liệu, bạn cần lưu ý rằng trong Database kiểu dữ liệu được Image được lưu trữ dưới dạng mảng byte[]. Chính vì vậy để lưu hình ảnh(Image) vào Database không có cách nào khác là bạn phải chuyển hình ảnh(Image) mà bạn muốn lưu vào Database dưới dạng mảng byte[] sau đó mới tiến hành chèn vào Database. Để chuyển một Image dưới dạng mảng byte[] bạn sử dụng đối tượng FileStream, sau đó tiến hành chèn vào cơ sở dữ liệu như bình thường. Chúc bạn vui !0:)

khanhthuy
15-07-2009, 09:53 PM
@ khanhthuy : Vậy là bạn chưa bao giờ lưu ảnh vào database dưới dạng nhị phân? Theo bạn thì "tốn tài nguyên hơn" là như thế nào. Hiển thị một ảnh lưu nhị phân thì cần những gì "phức tạp hơn rất nhiều" so với lưu đường dẫn?

Dark thấy rất kỳ quặc là các bạn không hiểu rõ việc mình đang làm là gì, ưu nhược điểm là thế nào mà cứ so sánh hồn nhiên, cái này hay hơn cái kia.
Bạn có thể nói rõ hơn cho mình hiểu hơn về vấn đề này được không. Mình mới học nên cũng có nhiều cái cần học hỏi. (=D)> (=D)>

sayit
16-07-2009, 08:55 AM
không biết có tốn tài nguyên hơn không nhưng khi đã lưu được ảnh vào database rồi và vào sql viết select để xem ảnh đó thì nó hiện lên một chuổi nhị phân dài kinh khủng. Tôi tưỡng đang bàn về Win App chứ Web App thì không rõ lắm nên không dám nói lung tung

c1inme
16-07-2009, 09:57 AM
Bạn select ra rồi thì phải chuyển ngược nó ra lại dạng Image rồi mới cho hiển thị lên picture box được chứ!!

Ở đây ko rỏ người hỏi muốn lưu ảnh với mục đích làm dzì!! từ đó mới có hướng làm tốt hơn chứ

sayit
16-07-2009, 10:40 AM
tui nói là trong sql và mục đích là coi cái image đó dưới dạng nhị phân

darkan
16-07-2009, 01:04 PM
Bạn có thể nói rõ hơn cho mình hiểu hơn về vấn đề này được không. Mình mới học nên cũng có nhiều cái cần học hỏi. (=D)> (=D)>

Nếu bạn chịu khó để ý một chút sẽ hiểu tại sao khi làm website người ta lại lưu đường dẫn. Nhưng không phải bao giờ người ta cũng lưu đường dẫn của file vào database. Việc lưu thế nào còn tùy thuộc vào mục đích sử dụng.

Thử phân tích một chút nhé. Nếu lưu file(nói chung, file ảnh cũng tương tự) vào database thì cần làm những gì?

Giống như bạn nguoidanongxala nói trên kia, phải đọc file dưới dạng binary, chuyển thành byte[] để lưu trong database. Khi nào cần file đó lại đọc byte[] từ database lên,chuyển lại thành file.

Còn cách lưu đường dẫn, có lẽ bạn đã rõ.

Với cách lưu file vào database, sẽ gặp phải vấn đề về tài nguyên của server khi có nhiều request đến file đó cùng lúc. Với website thì việc này là thường xuyên, do đó người ta không dùng cách lưu ảnh vào database với website(thực tế vẫn có vài trick để khắc phục việc này).

Tuy nhiên nếu số lượng request không lớn, lại có yêu cầu quản lý các file, bảo mật file ... thì việc lưu file vào database lại là lựa chọn tốt hơn.

Đại khái là nó có vài điểm như zầy ^^!

xxria
15-08-2009, 05:12 PM
1 file ảnh vài trăm kb. Nếu làm website thì load rất lâu.
tốt nhất là lưu đường dẫn.


không biết có tốn tài nguyên hơn không nhưng khi đã lưu được ảnh vào database rồi và vào sql viết select để xem ảnh đó thì nó hiện lên một chuổi nhị phân dài kinh khủng. Tôi tưỡng đang bàn về Win App chứ Web App thì không rõ lắm nên không dám nói lung tung
làm sao in ra được :D
kiểu file ảnh cũng là file nhị phân kích cỡ lớn.

nguoidanongxala
15-08-2009, 06:56 PM
Bạn có thể sử dụng thuật toán để sử lý kích cỡ của ảnh trước khi lưu vào Database. Chứ còn lưu ảnh kích cỡ lớn và độ phân giải vào Database thì không nên, lúc này bạn nên lưu đường dẫn tới ảnh. Đúng là trên Web chúng ta không nên lưu ảnh vào Databae , vì chúng ta có thể phải load nhiều ảnh vào Database và như vậy thì load rất lâu.

DKhanh
15-08-2009, 11:06 PM
databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html

Should I store images in the database or the filesystem?
I *strongly* recommend storing the file in the filesystem and its LOCATION in the database, though there are several components out there that make storing images in a database really easy. My preference is ASPUpload from Persits Software. You can see how simple the code is by looking at AspUpload.com - User Manual. Chapter 4.

You can also handle this type of task without a component, but it's a lot more code. There are good examples available at ASP 101 and StarDeveloper.

Here are the arguments for each methodology.

Keep images on the filesystem, and the location and other data in the database

1. if there is any chance that you will migrate to a different database platform, your current BLOB format might be incompatible with, or at least a pain to convert to, the new format -- since, like web browsers, each vendor has implemented things with their own slant.

2. when your database really goes south, to the point where even the backup is useless, you still have the files on the filesystem (though their usefulness is questionable, depending on how much related data was kept in the database). Which is arguably better than losing all of your data *and* all of your files.

3. having the images in the file system allows you to access the images from many different standard applications (FTP, web browser, etc) without having to write application code to pull the data out of the database, since you can't just 'SELECT image FROM table' and have the image appear in Enterprise Manager or Query Analyzer.

4. with some databases, e.g. Access and MSDE, the data inside is limited to 2 GB (SQL Server Express 2005, as of July 2004, is planned to support 4 GB), whereas the file system is only restricted by the size of the volume. Also, most hosts charge a premium for SQL Server storage space, so in that case it would be cheaper to store them in the file system.

5. in SQL Server 7.0, when a table has an IMAGE or TEXT column, a page is reserved for every row, whether or not that column has any data... so if you don't have an image for each record, there is potential to have a lot of wasted space. There are workarounds to this, of course, such as splitting the image data into its own table with a foreign key to the main table. SQL Server 2000 *can* combine multiple images < 8kb on one page (but typically, high-volume sites with plenty of images are not focusing on file sizes < 8kb anyway). Also, in SQL Server 2000, if your images are less than 8kb, you can use the text in row option by running the following code:

EXEC sp_TableOption N'TableName', 'TEXT IN ROW', 'ON'

Of course you will have to be careful with this option if you have other TEXT / IMAGE columns in the table.

6. performance wise, including an <IMG SRC> tag generated by the database and pointing to a file that already exists is going to be faster than pulling the file out of the database, generating a temp file on the web server, and streaming that to the user. Also, table scans take more resources when there is an image datatype as opposed to a varchar that simply holds a 'pointer' to the file's location.

7. can be quite complicated extracting images, say from an Access database, since it adds OLE header info to the file (see KB #175261). With SQL Server it's not so bad; see KB #173308 for an example that works right out of the box, KB #258038 for a VB example using ADODB.Stream, and KB #194975 for samples that use ADO's GetChunk and AppendChunk methods.

8. The number of KB articles involving BLOB/IMAGE columns in SQL Server is astounding. Here is a brief subset:

KB #152805, KB #162032, KB #164972, KB #170296, KB #171369, KB #177067, KB #177114, KB #187966, KB #192489, KB #193640, KB #195530, KB #195539, KB #197043, KB #198487, KB #207396, KB #217102, KB #223758, KB #230044, KB #244962, KB #254253, KB #252948, KB #255632, KB #257767, KB #263553, KB #271344, KB #272220, KB #276041, KB #280684, KB #286257, KB #298835, KB #308775, KB #317670, KB #324432, KB #834604, KB #888494, KB #890759, KB #895203

So, this should give you some idea of the number of problems associated with using the IMAGE datatype.

hieudiep
24-08-2009, 03:06 PM
Chào bạn nguoidanongxala, mình đang tìm hiểu về vấn đề này nên đang rất cần.Mình có download Project của bạn nhưng lại ko attach được Database nên ko biết trong database của bạn gồm những gì.Bạn có thể nói cụ thể được ko?(Mình dùng SQL server 2005 mà ko attach ).Do mình ko cài VS 2008(Mình cài 2005),nên ko thể mở pj của bạn nên không biết From bạn gồm những gì.Mình cũng lọ mọ làm theo của bạn,tạo Database,rồi tạo Procedure ...(ko biết đúng ko).Trong From mình cũng thêm các control (ko biết đúng ko...).Sau đây mình post lại đoạn code của bạn(VS 2005 mở đc mỗi File này),mình lắp ráp vào nhưng bị lỗi 1 số cái:


namespace Store__Image__Into__Database
{
public partial class Form1 :DevComponents.DotNetBar.Office2007Form
{
//Lay ten cua anh
private string FileName = null;
//Mang byte de luu anh
private byte[] buff = null;

//Chuoi ket noi
private static string ConnectionString = @"Data Source =.\SQLEXPRESS; Database = Students; Integrated Security = true;";
//Bien ket noi
private SqlConnection conn = new SqlConnection(ConnectionString);
//Command de thuc thi lenh
private SqlCommand cmd = null;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
//Thiet lap cac thuoc tinh String chp helpProvider Control
helpProvider1.SetHelpString(txtIDStudent, "Nhập mã sinh viên ở đây !");
helpProvider1.SetHelpString(txtNameStudent, "Nhập tên sinh viên ở đây !");
helpProvider1.SetHelpString(btnSelectImage, "Chọn ảnh sinh viên !");
helpProvider1.SetHelpString(btnSave, "Lưu thông tin sinh viên vào Database !");
}



private void btnDong_Click(object sender, EventArgs e)
{
this.Close();
}

private void btnSave_Click(object sender, EventArgs e)
{
//Kiem tra Ma Sinh vien
if (txtIDStudent.Text.Length == 0)
{
MessageBox.Show("Mã sinh viên không được để trống !", "Students", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{

try
{
//Mo ket noi
conn.Open();
MessageBox.Show("Đã kết nối với Database !", "Students", MessageBoxButtons.OK, MessageBoxIcon.Information);

//Tao lenh
//Xac lap kieu lenh
cmd = new SqlCommand("Pro_InsertStudent", conn);
cmd.CommandType = CommandType.StoredProcedure;

//Dinh nghia cac tham so va cac kieu du lieu tuong ung
cmd.Parameters.Add("@ID", SqlDbType.NVarChar, 10);
cmd.Parameters.Add("@NameStudent", SqlDbType.NVarChar, 50);
cmd.Parameters.Add("ImageStudent", SqlDbType.Image);

//Cac gia tri cua cac tham so
cmd.Parameters[0].Value = txtIDStudent.Text.Trim();
cmd.Parameters[1].Value = txtNameStudent.Text.Trim();
cmd.Parameters[2].Value = buff;

//Thuc thi truy van
//Lay so ket qua tra ve
int result = cmd.ExecuteNonQuery();

//Neu result la 1
//Them thanh cong
if (result == 1)
{
MessageBox.Show("Đã thêm một Student vào Database", "Students", MessageBoxButtons.OK, MessageBoxIcon.Information);

//Reset cac dieu khien
txtIDStudent.Text = "";
txtIDStudent.Focus();
txtNameStudent.Text = "";
fd.FileName = "";
ImageStudent.Image = null;

}
//Them ko thanh cong
//Da co Ma Sinh vien
else
{
MessageBox.Show("Mã sinh viên này đã có. Nhập Mã sinh viên khác để chèn vào Database", "Students", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

}
catch (Exception ex)
{

MessageBox.Show("Exception : " + ex.ToString(), "Students", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
//Dong ket noi
conn.Close();

}
}


}

private void btnSelectImage_Click(object sender, EventArgs e)
{
//Lay ten anh
if (fd.ShowDialog() == DialogResult.OK) //fd là gì? nó báo lỗi
{
FileName = fd.FileName;
}

try
{

if (FileName != null)
{
//Tao mot doi tuong FileStream
//Tham so truyen vao la FileName va FileMode.Open
FileStream fs = new FileStream(FileName, FileMode.Open);

//Tao mot mang byte[] bang voi FileStream
//De doc FileStream fs
buff = new byte[fs.Length];

//Doc FileStream fs vua tao o tren vao mang byte[] buff
fs.Read(buff, 0, (int)fs.Length);

//Hien thi anh
ImageStudent.Image = Image.FromStream(fs);

//Donh FileStream fs khi khong su dung nua
fs.Close();
}

}
catch (Exception Ex)
{

MessageBox.Show("Exception : " + Ex.ToString(), "Students",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}

private void llHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
//Hien thi tai lieu Help
Help.ShowHelp(txtNameStudent,@"C:\cSharp.chm");

//Hien thi muc luc cua Help Document
Help.ShowHelpIndex(txtNameStudent, @"C:\cSharp.chm");
}
Mong bạn hồi âm.Có gì mình hỏi tiếp ,TKS

namroyal88
24-08-2009, 05:15 PM
cảm ơn anh chị đã giúp đỡ..! quá trình tìm hiểu bây giờ em đã lưu được hình vào datagridview bang cách nhị phân. code là như thế này:


private void btthem_Click(object sender, EventArgs e)
{
try
{

SqlConnection con = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=QLBMAYTINH;Integrated Security=True");
con.Open();
SqlCommand cm = new SqlCommand("insert into nhasanxuat(logo,tennhasanxuat,manhasanxuat,website )values(@Pic,@tennsx,@mansx,@web)", con);

MemoryStream stream = new MemoryStream();
ptlogo.Image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);

byte[] pic = stream.ToArray();
cm.Parameters.AddWithValue("@Pic", pic);
cm.Parameters.AddWithValue("@tennsx", txttennhasanxuat.Text);
cm.Parameters.AddWithValue("@mansx", txtmanhasanxuat.Text);
cm.Parameters.AddWithValue("@web", txtwebsite.Text);


cm.ExecuteNonQuery();
MessageBox.Show("Thêm thành công...!", "Thông báo!");
//loadnsx();
}
catch (Exception)
{
MessageBox.Show("Thêm Không thành công...");
}
}
tuy đã lưu được nhưng em load hình từ gridview lên Picturebox lại gặp vấn đề. nhắp từng dòng trên gridview mà nó chỉ hiện một hình duy nhất.
code load hình:


public void loadimage()
{
SqlConnection con = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=QLBMAYTINH;Integrated Security=True");
con.Open();
DataTable source = (DataTable)dgvnhasx.DataSource;
DataRow row = source.Rows[dgvnhasx.CurrentRow.Index];

int mansx = int.Parse(lbmanhasanxuat.Text);
string strsql = "select logo from nhasanxuat where MaNhaSanXuat=" + mansx;
SqlCommand cm = new SqlCommand(strsql, con);

SqlDataAdapter dp = new SqlDataAdapter(cm);
DataSet ds = new DataSet("hinh");
byte[] MyData = new byte[0];
dp.Fill(ds, "hinh");
DataRow myRow;
myRow = ds.Tables["hinh"].Rows[0];
MyData = (byte[])myRow["logo"];
MemoryStream stream = new MemoryStream(MyData);
ptlogo.Image = Image.FromStream(stream);

}
giờ làm sao để khi click vào dòng nào trên datagridview thì hiện hình ảnh của dòng đó.
anh chị giúp em nhé....!
thank..
Nam....

namroyal88
24-08-2009, 11:06 PM
Bnaj càn lưu hình vào database theo kiểu nào thì Pm lại cho mình nhé.Mình đã làm cả 2 cái nay rồi.Còn về tốc đọ thì để các bạn tranh luận tiếp :D

bạn ơi mình lưu bằng nhị phân kiểu image được rùi đó giờ có việc lấy hình từ gridview lên picturebox thôi. mình làm mà chỉ load dược 1 hinh lên thôi.
code:


public void loadimage()
{
SqlConnection con = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=QLBMAYTINH;Integrated Security=True");
con.Open();
DataTable source = (DataTable)dgvnhasx.DataSource;
DataRow row = source.Rows[dgvnhasx.CurrentRow.Index];

int mansx = int.Parse(lbmanhasanxuat.Text);
string strsql = "select logo from nhasanxuat where MaNhaSanXuat=" + mansx;
SqlCommand cm = new SqlCommand(strsql, con);

SqlDataAdapter dp = new SqlDataAdapter(cm);
DataSet ds = new DataSet("hinh");
byte[] MyData = new byte[0];
dp.Fill(ds, "hinh");
DataRow myRow;
myRow = ds.Tables["hinh"].Rows[0];
MyData = (byte[])myRow["logo"];
MemoryStream stream = new MemoryStream(MyData);
ptlogo.Image = Image.FromStream(stream);

}
bạn giúp mình nhé....

namroyal88
26-08-2009, 12:19 AM
đây là bài của mình:
phần load hình nằm ở Logo của Nhà sản xuất
mong các bạn giúp đỡ....thank....
Nam...

zhaolong
12-01-2012, 09:51 AM
Đề tài này cũng dễ thôi mà. Bạn muốn lưu hình ảnh vào database àh.

Đơn giản ví dụ tại trang Deafault.aspx ta cần viết hàm upload hình vào thư mục Images của Project trước rồi sau đó lấy cái đường dẫn đó lưu vào csdl. Vậy là mình được cả hình cả đường dẫn mà ko phải nặng Database.

Hàm upload hình và lấy đường dẫn như sau:
Trang default: kéo thả các nút như sau. (hoặc bạn cứ copy zô :D)


<form enctype="multipart/form-data" method="post" id="form1" runat="server">
<asp:FileUpload runat="server" ID = "myupload" />
<asp:Button ID="Button1" runat="server" Text="Tải Lên" onclick="Button1_Click" />
<br />
<asp:TextBox ID="txtPath" runat="server" ontextchanged="txtPath_TextChanged"></asp:TextBox>
<asp:Button ID="btnOK" runat="server" onclick="btnOK_Click" Text="Lưu Vào CSDL" />
<br />

<asp:Label ID="lbSuccsec" runat="server" ForeColor="Blue"></asp:Label>
<asp:Label ID="lbError" runat="server" ForeColor="Red"></asp:Label>

<asp:Label ID="lbKT" runat="server" ForeColor="Blue"></asp:Label>
</form>

Code behind:


protected void Button1_Click(object sender, EventArgs e)
{

HttpPostedFile file = myupload.PostedFile;
if (myupload.HasFile == false && file.ContentLength > 500000)
{
lbError.Text = "Ảnh không hợp lệ";
}
else
{
try
{
string Path = Server.MapPath("~/Images/" + myupload.FileName.ToString());
myupload.SaveAs(Path);
txtPath.Text = myupload.FileName.ToString();//Lấy đường dẫn
lbSuccsec.Text = "Upload thành công";
}
catch
{
lbError.Text = "Trùng tên hoặc chưa chọn hình";
}
}
}
Sự kiện cho button lưu vào csdl
//Có được đường dẫn rùi đó. Bạn khai báo kết nối sql và lưu nó vào thôi
// Cau query là insert into TB_HinhAnh(duongdan) valuse (giatridalay)

vualuudan1990
11-02-2012, 03:22 PM
Em chẳng thấy bác nào viết về chủ đề asp.net mvc gì nhỉ.

xzerofor
13-02-2012, 10:22 AM
Đề tài này cũng dễ thôi mà. Bạn muốn lưu hình ảnh vào database àh.

Đơn giản ví dụ tại trang Deafault.aspx ta cần viết hàm upload hình vào thư mục Images của Project trước rồi sau đó lấy cái đường dẫn đó lưu vào csdl. Vậy là mình được cả hình cả đường dẫn mà ko phải nặng Database.

Hàm upload hình và lấy đường dẫn như sau:
Trang default: kéo thả các nút như sau. (hoặc bạn cứ copy zô :D)


<form enctype="multipart/form-data" method="post" id="form1" runat="server">
<asp:FileUpload runat="server" ID = "myupload" />
<asp:Button ID="Button1" runat="server" Text="Tải Lên" onclick="Button1_Click" />
<br />
<asp:TextBox ID="txtPath" runat="server" ontextchanged="txtPath_TextChanged"></asp:TextBox>
<asp:Button ID="btnOK" runat="server" onclick="btnOK_Click" Text="Lưu Vào CSDL" />
<br />

<asp:Label ID="lbSuccsec" runat="server" ForeColor="Blue"></asp:Label>
<asp:Label ID="lbError" runat="server" ForeColor="Red"></asp:Label>

<asp:Label ID="lbKT" runat="server" ForeColor="Blue"></asp:Label>
</form>

Code behind:


protected void Button1_Click(object sender, EventArgs e)
{

HttpPostedFile file = myupload.PostedFile;
if (myupload.HasFile == false && file.ContentLength > 500000)
{
lbError.Text = "Ảnh không hợp lệ";
}
else
{
try
{
string Path = Server.MapPath("~/Images/" + myupload.FileName.ToString());
myupload.SaveAs(Path);
txtPath.Text = myupload.FileName.ToString();//Lấy đường dẫn
lbSuccsec.Text = "Upload thành công";
}
catch
{
lbError.Text = "Trùng tên hoặc chưa chọn hình";
}
}
}
Sự kiện cho button lưu vào csdl
//Có được đường dẫn rùi đó. Bạn khai báo kết nối sql và lưu nó vào thôi
// Cau query là insert into TB_HinhAnh(duongdan) valuse (giatridalay)

- lưu hình ảnh trên web bằng đường dẫn thì đã làm được
- lưu hình ành vào Database trong winform thì cũng đã làm được
- Còn lưu đường dẫn vào databse và file ảnh vào thư mục, load ảnh đường dẫn tương đối trong winform thì chưa làm được . Có bạn nào biết xin hướng dẫn giúp....