本文介紹用戶端向ASP.NET MVC網站上傳檔案的一種方法。上傳的檔案比較小時可以用到。如果檔案比較大,通過FTP協議上傳也許更適合一些。
服務端
既然用戶端要向服務端傳檔案,服務端得能收檔案才行。在ASP.NET MVC網站中,要接收用戶端的檔案上傳很簡單。因為不用給用戶端返回視圖,只要和用戶端通訊即可,所以不用建立View。建立一個controller增加一個action,或者在現有controller中增加一個action用來處理檔案上傳。
1 /// <summary>
2 /// 上傳
3 /// </summary>
4 /// <param name="file">上傳的檔案資訊</param>
5 /// <returns></returns>
6 [HttpPost] // 允許以POST方式提交資料
7 public int Upload(HttpPostedFileBase file)
8 {
9 file.SaveAs(Server.MapPath(String.Format("/UploadFiles/{0}", file.FileName))); // 儲存檔案
10 return 0; // 返回資料給用戶端
11 }
參數名file也是POST資料時的key名,用戶端在上傳資料時也要帶這個名字。
用戶端
用戶端使用WPF或是WinForm區別不大,主要是擷取要上傳檔案的路徑,然後將該檔案上傳到伺服器。
1 /// <summary>
2 /// 選擇檔案按鈕
3 /// </summary>
4 /// <param name="sender"></param>
5 /// <param name="e"></param>
6 private void select_Click(object sender, RoutedEventArgs e)
7 {
8 OpenFileDialog dialog = new OpenFileDialog(); // 初始化對話方塊
9 dialog.Multiselect = false; // 不允許選中多個檔案
10 dialog.ShowDialog(); // 顯示對話方塊
11 filePath.Content = dialog.FileName; // 把檔案路徑顯示在介面上
12 upload.IsEnabled = true; // 允許按上傳按鈕
13 }
14
15 /// <summary>
16 /// 上傳檔案按鈕
17 /// </summary>
18 /// <param name="sender"></param>
19 /// <param name="e"></param>
20 private void upload_Click(object sender, RoutedEventArgs e)
21 {
22 string url="http://localhost:9741/Sample/Upload"; // 上傳檔案的服務端URL
23 WebClient webClient = new WebClient(); // 初始化WebClient
24 webClient.UploadFile(url, filePath.Content.ToString()); // 上傳檔案
25 }
WebClient上傳檔案時預設的key就是file,因此這裡沒有顯式的設定。如果使用方式上傳資料,可能需要提供這個名字,以使伺服器能夠接收到檔案。
在這個例子中,服務端沒有對用戶端或上傳的檔案進行驗證。在正式使用時,應考慮到安全因素。
樣本下載
本文適用於 .NET Framework 4