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