本文介绍客户端向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
分类:
.NET Framework
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2010-04-19 在 ADO.NET Entity Framework 4 中使用枚举