ASP.NET实现上传文件

前端

界面十分简单,只是放一个file类型的<input>和一个按钮,并且为这个按钮添加点击事件(btnUpLoad_Click),如下图:

代码:

[html] view plain copy 

  1. <input id="UpLoad" type="file" runat="server" />
  2. <asp:Button runat="server" Text="上传" ID="btnUpLoad" OnClick="btnUpLoad_Click" />

后台

再就是在后台编写上传按钮点击事件UpLoad_Click里的代码,先大体说一下思路:

1、根据file类型的<input>控件获得将要上传文件在本机的物理路径;

2、在这个物理路径中用截取字符串的方法获得文件名(第一步中取得的路径为本机的绝对路径,在服务器上是无效的,所以这里我们只需要获取文件名);

3、利用file类型的<input>控件属性PostedFile的SaveAs()方法将相应文件存储到服务器中指定的文件夹中。

核心代码:

[csharp] view plain copy 

  1. protected void btnUpLoad_Click(object sender, EventArgs e)
  2. {
  3. //取出所选文件的本地路径
  4. string fullFileName = this.UpLoad.PostedFile.FileName;
  5. //从路径中截取出文件名
  6. string fileName = fullFileName.Substring(fullFileName.LastIndexOf("\\") + 1);
  7. //限定上传文件的格式
  8. string type = fullFileName.Substring(fullFileName.LastIndexOf(".") + 1);
  9. if (type == "doc" || type == "docx" || type == "xls" || type == "xlsx" || type == "ppt" || type == "pptx" || type == "pdf" || type == "jpg" || type == "bmp" || type == "gif" || type == "png" || type == "txt" || type == "zip" || type == "rar")
  10. {
  11. //将文件保存在服务器中根目录下的files文件夹中
  12. string saveFileName = Server.MapPath("/files") + "\\" + fileName;
  13. UpLoad.PostedFile.SaveAs(saveFileName);
  14. Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('文件上传成功!');</script>");
  15. //向数据库中存储相应通知的附件的目录
  16. BLL.news.InsertAnnexBLL insertAnnex = new BLL.news.InsertAnnexBLL();
  17. AnnexEntity annex=new AnnexEntity();     //创建附件的实体
  18. annex.AnnexName=fileName;               //附件名
  19. annex.AnnexContent=saveFileName;        //附件的存储路径
  20. annex.NoticeId = noticeId;              //附件所属“通知”的ID在这里为已知
  21. insertAnnex.InsertAnnex(annex);         //将实体存入数据库(其实就是讲实体的这些属性insert到数据库中的过程,具体BLL层和DAL层的代码这里不再多说)
  22. }
  23. else
  24. {
  25. Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('请选择正确的格式');</script>");
  26. }
  27. }

ASP.NET实现下载文件

上述操作已经可以实现将一个个附件存入数据库,在数据库中存储的情况给大家截了个图:

下面就要把这些附件在页面上显示,页面显示效果为:

点击附件,浏览器提示下载:

前台

按照需求来说,每则发布的通知可以包含若干个附件,所一前台用了repeter控件来显示多个附件:

代码:

[html] view plain copy 

  1. <asp:Repeater ID="rptAnnex" runat="server">
  2. <ItemTemplate>
  3. <%--为repeter添加序号--%>
  4. 附件:<%#Container.ItemIndex + 1 %>
  5. <asp:LinkButton ID="lbtnDownLoad" runat="server" OnCommand="lbtnDownLoad_Command" CommandArgument="<%#((Model.AnnexEntity)Container.DataItem).AnnexContent %>"><%#((Model.AnnexEntity)Container.DataItem).AnnexName %></asp:LinkButton>
  6. <br />
  7. </ItemTemplate>
  8. </asp:Repeater>

后台

ASP.NET可以采用多种方式下载文件(详情可参考《ASP.NET下载文件的几种方式》),这里采用了流式的下载方式(参考文章《Asp.net下载实例》):

[csharp] view plain copy 

  1. using System.IO;
  2. protected void lbtnDownLoad_Command(object sender, CommandEventArgs e)
  3. {
  4. // 定义文件名
  5. string fileName = "";
  6. // 获取文件在服务器的地址
  7. string url = e.CommandArgument.ToString();
  8. // 判断传输地址是否为空
  9. if (url == "")
  10. {
  11. // 提示“该文件暂不提供下载”
  12. Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script defer>alert('该文件暂不提供下载!');</script>");
  13. return;
  14. }
  15. // 判断获取的是否为地址,而非文件名
  16. if (url.IndexOf("\\") > -1)
  17. {
  18. // 获取文件名
  19. fileName = url.Substring(url.LastIndexOf("\\") + 1);
  20. }
  21. else
  22. {
  23. // url为文件名时,直接获取文件名
  24. fileName = url;
  25. }
  26. // 以字符流的方式下载文件
  27. FileStream fileStream = new FileStream(@url, FileMode.Open);
  28. byte[] bytes = new byte[(int)fileStream.Length];
  29. fileStream.Read(bytes, 0, bytes.Length);
  30. fileStream.Close();
  31. Response.ContentType = "application/octet-stream";
  32. // 通知浏览器下载
  33. Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
  34. Response.BinaryWrite(bytes);
  35. Response.Flush();
  36. Response.End();
  37. }

控制上传文件的大小

前面的两个步骤基本上已经可以实现文件的上传和下载,除了这些,还需要控制上传文件的大小,默认情况下上传文件大小限制为4M,这里可以在配置文件web.config中修改,在httpRuntime节点中加入如下属性即可:

[html] view plain copy 

  1. <configuration>
  2. <system.web>
  3. <httpRuntime executionTimeout="300" maxRequestLength="51200" useFullyQualifiedRedirectUrl="false" />
  4. </system.web>
  5. </configuration>

executionTimeout 属性的值是 ASP.NET 关闭前允许发生的上载秒数,maxRequestLength指限制上传文件的大小,useFullyQualifiedRedirectUrl指示客户端重定向是否是完全限定的,或者指示是否代之以将相对重定向发送到客户端。

参考:http://blog.csdn.net/huyuyang6688/article/details/40785429

asp文件上传和下载相关推荐

  1. 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载

    效果图 上传文件页面: 下载文件页面:   1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="t ...

  2. [转载]ASP.NET Core文件上传与下载(多种上传方式)

    ASP.NET Core文件上传与下载(多种上传方式) 前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理 ...

  3. ASP.NET 文件上传于下载

    本文主要介绍一下,在APS.NET中文件的简单上传于下载,上传是将文件上传到服务器的指定目录下,下载是从存入数据库中的路径,从服务器上下载. 1.上传文件 (1)页面代码 <table alig ...

  4. asp.net 文件上传和下载管理源码

    利用asp.net进行文件上传和下载时非常常用的功能,现做整理,将源码上传,提供给初学者参考,以下代码中的样式文件就不上传了,下载者请将样式去掉. 效果图如下: <%@ Page Languag ...

  5. ASP.NET MVC实现简单的文件上传与下载

    使用ASP.NET MVC实现简单的文件上传与下载. 1.上传文件HTML <form action='@Url.Action("Upload", "File&qu ...

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

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

  7. 超详细的文件上传和下载(Spring Boot)

    超详细的文件上传和下载 前言Ⅰ:@RequestParam和@RequestPart的区别 @RequestPart @RequestPart这个注解用在multipart/form-data表单提交 ...

  8. Internet Explorer 各版本文件上传和下载限制

    在过去的几年中,我们对WinINET的文件上传和下载限制有一些疑问.我在下表中总结了这些限制: 文件上传和下载限制 上传(总大小) 下载(每个文件) Internet Explorer 6 2GB 2 ...

  9. Angular 文件上传与下载

    Angular文件上传与下载 文件上传 方式1 使用NG ZORRO中的组件. 文件下载 方式1 直接下载 方式2 通过HTTP请求后端数据的方式进行下载 文件上传 方式1 使用NG ZORRO中的组 ...

最新文章

  1. blue pill Flash 128KB的传言
  2. 巧用Windows server 2008密码重置盘
  3. 测试管理 | 基于风险的测试
  4. python 状态机_Python 状态机
  5. canvas转化为图片并下载
  6. 过去一年,被我们“高估”的技术清单
  7. High Availability手册(3): 配置
  8. 现在动手,建立你的灾备系统
  9. 快速给视频批量添加水印,操作简单
  10. C# winform国际版,中英文转换
  11. 大数据职业理解_大数据的职业发展规划
  12. 老九学堂 学习 C++ 第四天
  13. Spring Boot+Vue+阿里云OOS实现图片上传
  14. Marvell 88E1111PHY芯片简介
  15. html中图片鼠标滑动的效果,JS DOM实现鼠标滑动图片效果
  16. 8款最佳的开源在线学习CMS系统
  17. HashCat配GPU
  18. 栈展开(stack unwinding)
  19. 前端 数组转字符串,字符串转数组
  20. 科普 | 区块链概念最全解析:区块链的下一个十年什么样?

热门文章

  1. 怎么把程序内部坐标转为屏幕坐标_全网最详细CNC加工中心程序代码大全!
  2. java 8 并行_Java 8新特性之 并行和并行数组(八恶人-8)
  3. 用C语言写HMI程序,HMI画面元素组成设计及代码生成方法与流程
  4. 计算机编码发明者,“自然码”的发明者周志农在从计算机*毕业后的,才有了第一只...
  5. 缺货大环境下,假货防不胜防,我们又该怎样分辨真假芯片?
  6. C和C++太难了。。搞这个方向进大厂它不香吗?
  7. 为什么C和C++难以被取代?
  8. 国产操作系统要起来,这款Linux是你的菜吗?
  9. 论基于candence的组装清单做法
  10. linux环境下配置虚拟主机域名,Linux下三种虚拟主机的配置方法