Vấn đề: Bạn cần tạo một trang cho phép người dùng upload một file.
Giải quyết: Sử dụng điều kiểm HtmlInputFile, thiết lập kiểu mã hóa của form là multipart/form-data, và lưu file bằng phương thức HtmlInputFile.PostedFile. SaveAs.
Vì ASP.NET thực thi trên server nên không có cách nào để truy xuất các tài nguyên trên máy client, bao gồm file. Tuy nhiên, bạn có thể sử dụng điều kiểm System.Web.UI. HtmlControls.HtmlInputFile để cho phép người dùng upload một file. Điều kiểm này trả về phần tử HTML <input type="file">, hiển thị một nút Browse và một hộp chứa tên file. Người dùng nhắp vào nút Browse và chọn một file. Bước này diễn ra một cách tự động và không đòi hỏi bất kỳ đoạn mã tùy biến nào. Sau đó, người dùng phải nhắp vào một nút khác (bạn phải tạo nút này) để bắt đầu quá trình upload.
Để tạo một trang cho phép upload file, bạn cần thực hiện các bước sau đây:
·         Thiết lập kiểu mã hóa của form là multipart/form-data. Để thực hiện thay đổi này, tìm thẻ <form> trong file .aspx và điều chỉnh như sau:
Code:
<form id="Form1" enctype="multipart/form-data" runat="server">
·         Thêm điều kiểm HtmlInputFile vào trang. Trong Microsoft Visual Studio .NET, bạn sẽ tìm thấy điều kiểm này dưới thẻ HTML của hộp công cụ, với tên là File Field. Một khi đã thêm điều kiểm này, bạn nhắp phải vào nó và chọn Run As Server Control để tạo thẻ <input type="file" runat="server">.
·         Thêm một Button khác để bắt đầu quá trình chuyển giao file đã được chỉ định (bằng phương thức HtmlInputFile.PostedFile.SaveAs).
Dưới đây là phần mã cho trang upload file:
Visual C# Code:
  1. using System;
  2. using System.Web;
  3. using System.Web.UI.WebControls;
  4. using System.IO;
  5.  public class UploadPage : System.Web.UI.Page {
  6.      protected System.Web.UI.WebControls.Label lblInfo;
  7.     protected System.Web.UI.WebControls.Button cmdUpload;
  8.     protected System.Web.UI.HtmlControls.HtmlInputFile FileInput;
  9.      // (Bỏ qua phần mã designer.)
  10.      private void cmdUpload_Click(object sender, System.EventArgs e) {
  11.          if (FileInput.PostedFile.FileName == "") {
  12.              // Không file nào được chỉ định.
  13.             lblInfo.Text = "No file specified.";
  14.         } else {
  15.              try {
  16.                  if (FileInput.PostedFile.ContentLength > 1048576) {
  17.                      // Cấm các file lớn hơn 1 megabyte.
  18.                     lblInfo.Text = "File is too large.";
  19.                  }else {
  20.                      // File được lưu vẫn giữ lại tên file gốc của nó.
  21.                     string fileName = Path.GetFileName(FileInput.PostedFile.FileName);
  22.                     // Tiến trình ASP.NET phải có quyền đối với
  23.                     // vị trí nó thực hiện lưu file, nếu không
  24.                     // ngoại lệ "access denied" sẽ xảy ra.
  25.                     FileInput.PostedFile.SaveAs(fileName);
  26.                     lblInfo.Text = "File " + fileName + " uploaded.";
  27.                 }
  28.             }catch (Exception err) {
  29.                  lblInfo.Text = err.Message;
  30.             }
  31.         }
  32.     }
  33. }
Bạn có thể kiểm tra các thuộc tính của file được chỉ định (bao gồm kích thước của nó) trước khi lưu để ngăn kiểu tấn công từ chối dịch vụ (lừa ứng dụng ASP.NET để upload các file lớn làm đầy đĩa cứng). Tuy nhiên, đoạn mã này không ngăn người dùng submit file ngay từ đầu, điều này vẫn có thể làm chậm server và được sử dụng để mở một kiểu tấn công từ chối dịch vụ khác—nắm lấy tất cả các tiểu trình thợ ASP.NET đang rảnh. Để ngăn chặn kiểu tấn công này, bạn hãy sử dụng thẻ <httpruntime> trong file Web.config để chỉ định kích thước tối đa của file (tính theo kilobyte):
XML Code:
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.   <system.web>
  4.      <httpRuntime maxRequestLength="4096" />
  5.     <!-- Bỏ qua các thiết lập khác. -->
  6.    </system.web>
  7. </configuration>
Nếu bạn không chỉ định kích thước tối đa, giá trị mặc định 4096 (4 megabyte) sẽ áp dụng. Nếu người dùng cung cấp một file quá lớn, một ngoại lệ sẽ phát sinh ngay khi trang được post-back.
Có một cách khác để gửi file từ client lên web-server là sử dụng dịch vụ Web XML ASP.NET. Bạn cần phát triển một ứng dụng dựa-trên-Windows cho phép người dùng chọn một file và rồi giao tiếp với một dịch vụ Web XML để chuyển giao thông tin.

Trích từ "Các giải pháp lập trình C#"