Upload file trong ASP.NET


Hôm nay, chúng ta sẽ sử dụng một controls có sẵn trong ASP.NET dùng để upload một tập tin lên Server. Chúng ta còn thực hiện thêm việc kiểm tra loại tập tin…

Trước hết, chúng ta tạo một project ASP.NET Web Application mới tên là SimpleFileUpload

image

Trong phần thiết kế của trang Default.aspx, chúng ta sẽ kéo control FileUpload trong ToolBox vào trang. Đặt trên cho control này là fuPicture. Sau đó kéo thêm một Button vào trang và đặt tên cho button này là btnUpload. Để biết được quá trình Upload đã hoàn thành hay chưa, chúng ta sẽ dùng thêm một Label đặt trên trang web để thông báo, đặt tên Label này là lblMessage

image

Việc tiếp theo là viết phương thức xử lý sự kiện người dùng click chuột vào nút “Bắt đầu upload”. Các bạn nhấn double click vào button này để bắt đầu viết xử lý. Nội dung phương thức xử lý sự kiện là như sau:

protected void btnUpload_Click(object sender, EventArgs e)
{
    if (fuPicture.HasFile)
    {
        fuPicture.SaveAs(Server.MapPath("~") + fuPicture.FileName);
        lblMessage.Text = "Upload thành công";
    }
}

Control FileUpload cung cấp cho chúng ta nhiều thuộc tính để biết được thông tin về tập tin đã được chọn. Một số thuộc tính quan trọng là:

  • HasFile: nếu đã có tập tin được chọn
  • PostedFile: đây là thuộc tính lưu trữ các thông tin khác về tập tin như kích thước tập tin, loại nội dung tập tin…
  • FileName: tên của tập tin được chọn

Ngoài ra, Control FileUpload còn có phương thức SaveAs cho phép chúng ta lưu trữ tập tin được chọn. Các bạn lưu ý rằng trong đoạn code trên thì chúng ta có sử dụng phương thức Server.MapPath(“~”) cộng với tên tập tin. Lý do là vì phương thức SaveAs yêu cầu chúng ta phải cung cấp đường dẫn đầy đủ của Server tính từ địa chỉ gốc, do đó Server.MapPath(“~”) chính là dùng để lấy địa chỉ gốc của ứng dụng Web chúng ta đang chạy.

Bây giờ nhấn F5 để xem chạy trang web. Các bạn chọn một tập tin sau đó nhấn “Bắt đầu upload”. Mở thư mục chứa trang web thì chúng ta sẽ thấy tập tin vừa được chọn xuất hiện trong đó.

Bây giờ, chúng ta sẽ bổ sung thêm tính năng hạn chế chỉ cho phép một số loại tập tin được phép upload lên bằng cách kiểm tra phần mở rộng của tập tin đó. Nội dung đoạn mã kiểm tra phần mở rộng của tập tin như sau, giả sử rằng chúng ta đang muốn chỉ cho phép người dùng upload các tập tin đuôi .png

private bool CheckFileType(string FileName)
{
    string ext = Path.GetExtension(FileName);
    if (ext.Equals(".png"))
    {
        return true;
    }
    else
    {
        return false;
    }
}

Chúng ta sẽ thực hiện tích hợp đoạn mã kiểm tra với đoạn mã upload như sau:

protected void btnUpload_Click(object sender, EventArgs e)
{
    if (fuPicture.HasFile)
    {
        if (CheckFileType(fuPicture.FileName))
        {
            fuPicture.SaveAs(Server.MapPath("~") + fuPicture.FileName);
            lblMessage.Text = "Upload thành công";
        }
        else
        {
            lblMessage.Text = "Loại file không hợp lệ";
        }
    }
}

Nhấn F5 để biên dịch lại ứng dụng Web và thử chọn một tập tin bất kỳ, dễ dàng thấy được rằng bạn chỉ có thể upload được các tập tin có đuôi .png, còn các loại tập tin khác sẽ không thể upload được.

Chúc thành công,

Tác giả: xuanchien

Tran Xuan Chien. Japan Advanced Institute of Science and Technology - Japan. Senior Developer - NUS Technology.

20 thoughts on “Upload file trong ASP.NET”

  1. èo có cái ji đâu nếu mà nhiều đuôi thì chỉ cần lọc ở hàm CheckFileType:

    if (ext.Equals(“.png”)|| ext.Equals(“.jpg”) || ext.Equals(“.gif”))
    {
    return true;
    }

      1. Bạn xuanchien ơi. Cho minh hỏi sao mình làm nhu bạn HD nếu ở duoi local thi chạy bình thường nhưng sau khi đưa source lên host chạy thực tế thì không chọn được hình từ local để upload lên host. Code của mình thế này:
        HttpPostedFile files = news_img_file.PostedFile;
        //nếu đã có tập tin được chọn hoặc quá kích thước cho phép
        if (news_img_file.HasFile == false && files.ContentLength > 500000)
        {
        WebMsgBox.Show(“Ảnh không hợp lệ!”);
        }
        else
        {
        try
        {
        string path = Server.MapPath(“~/Imgupload/new/” + news_img_file.FileName);

        news_img_file.SaveAs(path);
        txtImage.Text = “../Imgupload/new/” + news_img_file.FileName;
        WebMsgBox.Show(“Chọn thành công!”);
        }
        catch
        {
        WebMsgBox.Show(“Trùng tên hoặc chưa chọn hình!”);
        }
        }
        Bạn có thể chỉ giúp cách fix lỗi này không?

        Cảm ơn bạn nhiều!

    1. Ở đây mình chỉ hướng dẫn upload file, còn việc insert vào database nằm ở phần CSDL. Việc chèn chuỗi vào database thì chắc chắn là không có gì khó khăn với mọi người rồi…

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s