本文介绍客户端向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 }
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 }
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