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

 

posted on 2011-04-19 19:49  Magic.Z  阅读(4923)  评论(2编辑  收藏  举报