说明:
前后端代码中均只用到 ASP.NET MVC原生的技术,不需要用到ajax,WebAPI等。
下篇文章【 jQuery + Ajax + WebAPI 上传文件】会介绍使用Ajax POST来上传文件以及使用WebAPI做后台处理的方法。

1. 上传文件

ASP.NET MVC最简单的方式是使用表单来POST文件。

前端代码如下:

<form action="/BulkUpload/UploadFiles" method="post" enctype="multipart/form-data"><input type="file" /><input type="submit" value="upload" />
</form>

说明:
action 是表单提交后后台要调用的处理方法。
enctype="multipart/form-data" 这句一定要加上,表明传递的是文件,不是普通数据。

后台代码:

[HttpPost]
public bool UploadFiles()
{// 文件数为0证明上传不成功if (Request.Files.Count == 0){throw new Exception("请选择上传文件!");}string uploadPath = Server.MapPath("../UploadFiles/");// 如果UploadFiles文件夹不存在则先创建if (!Directory.Exists(uploadPath)){Directory.CreateDirectory(uploadPath);}// 保存文件到UploadFiles文件夹for (int i = 0; i < Request.Files.Count; ++i){HttpPostedFileBase file = Request.Files[i];// 文件名为空证明没有选择上传文件if (file.FileName == ""){return false;}string filePath = uploadPath + Path.GetFileName(file.FileName);string fileName = file.FileName;// 检查上传文件的类型是否合法string fileExtension = Path.GetExtension(filePath).ToLower();string fileFilter = ConfigurationManager.AppSettings["FileFilter"];if (fileFilter.IndexOf(fileExtension) <= -1){Response.Write("对不起!请上传图片!!");return false;}// 如果服务器上已经存在该文件则要修改文件名与其储存路径while (System.IO.File.Exists(filePath)){Random rand = new Random();fileName = rand.Next().ToString() + "-" + file.FileName;filePath = uploadPath + Path.GetFileName(fileName);}// 把文件的存储路径保存起来SaveUploadFileInfo(fileName, filePath);  // todo:SaveUploadFileInfo方法请自己实现// 保存文件到服务器file.SaveAs(filePath);}return true;
}

上面用到了配置文件,也列出来一下

  <appSettings>...<add key="FileFilter" value=".gif|.jpg|.jpeg|.png|" />...</appSettings>

2. 下载文件

前端代码:

<input type="submit" value="下载" onclick="downloadFile()"/><script type="text/javascript">function downloadFile() {window.location.href = "/BulkUpload/DownloadFile";}
</script>

后台代码:

[HttpGet]
public FileStreamResult DownloadFile()
{string result = GetUploadFileInfo();  // todo:GetUploadFileInfo方法请自己实现string[] str = result.Split(',');string fileName = str[0];string filePath = str[1];return File(new FileStream(filePath, FileMode.Open), "application/octet-stream", Server.UrlEncode(fileName));
}

2018/03/21
【Update】
原来的代码里面没有放 SaveUploadFileInfoGetUploadFileInfo 两个方法,那是想着这不是本文的重点。保存到信息到数据库用ADO.NET也好ORM也好,随便搜一下也很多栗子。
我这里只是个demo,不是正式项目,没有保存到数据库,只是保存到了一个文本,而且代码逻辑也没考虑多次上传的问题,而且这也不是文章要讨论的重点。所以没贴出来。
然而有人评论说我的代码是不知道从哪里复制的,我只能说伸手党真是什么样的人都有(那条评论被我冲动删了)。真是无语了,那我就贴完整代码吧。
事先声明!!!下面的代码逻辑不完整,请不要直接使用!!!

        // 把上传文件的文件名与存储路径保存到record.txt文件private void SaveUploadFileInfo(string fileName, string filePath){FileStream fs = new FileStream(@"D:\...\record.txt", FileMode.Create);  // 测试的我就把路径写死了string saveStr = fileName + "," + filePath;byte[] data = System.Text.Encoding.Default.GetBytes(saveStr);fs.Write(data, 0, data.Length);fs.Flush();fs.Close();}// 从record.txt文件获取上传文件的存储路径private string GetUploadFileInfo(){StreamReader sr = new StreamReader(@"D:\...\record.txt", System.Text.Encoding.Default);string filePath = sr.ReadLine();sr.Close();return filePath;}

ASP.NET MVC图片文件上传与下载相关推荐

  1. Mr.张小白(案例:基于Spring MVC实现文件上传和下载)

    基于Spring MVC实现文件上传和下载 一.步骤 1.引入相关依赖pom.xml <?xml version="1.0" encoding="UTF-8&quo ...

  2. ASP.NET MVC之文件上传【一】(八)

    这一节我们来讲讲在MVC中如何进行文件的上传,我们逐步深入,一起来看看. Upload File(一) 我们在默认创建的项目中的Home控制器下添加如下: public ActionResult Up ...

  3. asp如何将图片文件上传到mysql数据库中_怎样才能利用ASP把图片上传到数据库

    欢迎来到小编的文章进行学习阅读,想必大家又有很多问题吧,在这里会有你想要收获的答案,请大家慢慢学习吧! ASP(Active Server Pages)是Microsoft很早就推出的一种WEB应用程 ...

  4. ASP.NET MVC大文件上传GB级

    后台合并文件时,解决了并发合并冲突异常的情况.测试了2G文件上传,测试了4G文件上传,测试了8G文件上传,都成功了 前端代码方式一 <script src="~/Scripts/jqu ...

  5. Spring MVC的文件上传和下载以及拦截器

    一.文件上传 在使用form表单进行文件上传时,必须将method设置为 post,并将enctype设置为multipart/form-data.只有这样设置,浏览器才会将需要上传的文件已二进制数据 ...

  6. ASP.NET实现大文件上传和下载

    总结一下大文件分片上传和断点续传的问题.因为文件过大(比如1G以上),必须要考虑上传过程网络中断的情况.http的网络请求中本身就已经具备了分片上传功能,当传输的文件比较大时,http协议自动会将文件 ...

  7. asp如何将图片文件上传到mysql数据库中_ASP图片上传[图片直接存储在数据库里面]...

    一.设计数据库testimg.mdb 为方便调试,设计表imgurl,其中两个字段:id(自动编号.关键字).img(OLE 对象) 二.连接数据库文件conn.asp db_path="t ...

  8. vue+element-ui+asp.net core 实现文件上传和下载

    原文连接 个人心得: 1.前端需要发送http请求到后端 2.后端用接受到请求之后,返回一个FileContentResult类型,提醒浏览器下载

  9. asp.net coree文件上传与下载实例

    asp.net core像springboot非常相似,我们从一个springboot文件上传与下载的例子来引到asp.net core的文件上传与下载: 本文asp.net core版本为:6.0 ...

最新文章

  1. Lucene.Net 2.3.1开发介绍 —— 三、索引(六)
  2. GitLab [Webhooks] 实现自动化服务器部署
  3. leetcode题解【持续更新】
  4. grafana的+按钮_基于 Prometheus、Grafana 的 EMQ X 物联网 MQTT 服务器可视化运维监控...
  5. 每日长难句打卡Day22
  6. iOS 又出重大Bug!一秒搞崩 iPhone 的网络连接功能
  7. linux红帽认证管理员,红帽(Red Hat)面向企业开发人员和应用管理员的认证
  8. 心电信号越界怎么回事_心电信号的分析
  9. 产品学习---互联网思维
  10. (KNN)K-近邻算法介绍和 Facebook签到位置预测案例应用
  11. Excel 标记重复多余项
  12. Android 选择商品属性sku
  13. 原装win10系统换win7系统需要改的参数
  14. jsonNode转化为jsonObject
  15. 北京融汇数联科技实习面试
  16. 【web3.0设计】区块链如何解决真实交易的信用问题?
  17. matlab灰关联度,[转载]灰色关联和加权关联分析法matlab程序
  18. JavaScript对象的使用及存储方式的剖析
  19. php wscript.shell组件,wscript.shell × 命令行执行组件
  20. New Phytologist | 中科院南土所孙波/梁玉婷组揭示促进低肥力土壤中作物生长的微生物策略...

热门文章

  1. [nlp] 负采样 nce_loss
  2. 如何在隔离电源 PCB 布局中接地
  3. Unity3D中开发2D游戏——游戏玩家的出生、无敌、死亡方法
  4. codefrces 1203 E. Boxers(贪心)
  5. 2022年十大除甲醛净化器排名
  6. NOA渗透率超5%?智能汽车赛道争夺下一轮市场高点
  7. git clone 太慢咋搞?两行命令解决(需要纸飞机)
  8. 2022年一级注册建筑师考试《建筑设计》巩固习题及答案
  9. vue +element 数字键盘,vant 数字键盘使用
  10. 大厂架构师之路7. 创业 - 全工种作业