大学最近作出相关的需求进行上传和下载文件的网站(求为:站点发布的通知,在后台要能给每一个通知加入附件。在前台要能显示并下载附件),之前仅仅是学习过关于上传的 理论知识,这里实践了一下下,与大家分享一下成果。

事先说明:这个样例採用的是简单的三层结构,层与层之间是用实体来传值。

并且这样的方法不但在本地測试时能够成功,并且能够部署在server上,供异地上传和下载文件。

专门做了一个数据库表用来存储附件的相关信息:

字段 说明
AnnexID 附件ID
AnnexName 附件名称
AnnexAddress 存储附件的地址
NoticeID 附件所属“通知”的ID

ASP.NET实现上传文件

前端

界面十分简单。仅仅是放一个file类型的<input>和一个button,而且为这个button加入点击事件(btnUpLoad_Click),例如以下图:

代码:

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

后台

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

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

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

3、利用file类型的<input>控件属性PostedFile的SaveAs()方法将对应文件存储到server中指定的目录中。

核心代码:

    protected void btnUpLoad_Click(object sender, EventArgs e){//取出所选文件的本地路径string fullFileName = this.UpLoad.PostedFile.FileName;//从路径中截取出文件名称string fileName = fullFileName.Substring(fullFileName.LastIndexOf("\\") + 1);//限定上传文件的格式string type = fullFileName.Substring(fullFileName.LastIndexOf(".") + 1);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"){//将文件保存在server中根文件夹下的files文件夹中string saveFileName = Server.MapPath("/files") + "\\" + fileName;UpLoad.PostedFile.SaveAs(saveFileName);Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('文件上传成功。');</script>");//向数据库中存储对应通知的附件的文件夹BLL.news.InsertAnnexBLL insertAnnex = new BLL.news.InsertAnnexBLL();AnnexEntity annex=new AnnexEntity();     //创建附件的实体annex.AnnexName=fileName;               //附件名annex.AnnexContent=saveFileName;        //附件的存储路径annex.NoticeId = noticeId;              //附件所属“通知”的ID在这里为已知insertAnnex.InsertAnnex(annex);         //将实体存入数据库(事实上就是讲实体的这些属性insert到数据库中的过程。详细BLL层和DAL层的代码这里不再多说)}else{Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('请选择正确的格式');</script>");}}

ASP.NET实现下载文件

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

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

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

前台

依照需求来说,每则公布的通知能够包括若干个附件,所一前台用了repeter控件来显示多个附件:

代码:

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

后台

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

 using System.IO;protected void lbtnDownLoad_Command(object sender, CommandEventArgs e){// 定义文件名称  string fileName = "";// 获取文件在server的地址  string url = e.CommandArgument.ToString();// 推断传输地址是否为空  if (url == ""){// 提示“该文件暂不提供下载”  Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script defer>alert('该文件暂不提供下载!

');</script>"); return; } // 推断获取的是否为地址。而非文件名称 if (url.IndexOf("\\") > -1) { // 获取文件名称 fileName = url.Substring(url.LastIndexOf("\\") + 1); } else { // url为文件名称时,直接获取文件名称 fileName = url; } // 以字符流的方式下载文件 FileStream fileStream = new FileStream(@url, FileMode.Open); byte[] bytes = new byte[(int)fileStream.Length]; fileStream.Read(bytes, 0, bytes.Length); fileStream.Close(); Response.ContentType = "application/octet-stream"; // 通知浏览器下载 Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); Response.BinaryWrite(bytes); Response.Flush(); Response.End(); }

控制上传文件的大小

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

<configuration><system.web>  <httpRuntime executionTimeout="300" maxRequestLength="51200" useFullyQualifiedRedirectUrl="false" /></system.web>
</configuration>

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

到这里就大功告成了,欢迎分享更好的方法!

版权声明:本文博客原创文章。博客,未经同意,不得转载。

ASP.NET文件上传和下载相关推荐

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

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

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

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

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

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

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

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

  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. 饥荒自建服务器崩了之后没有记录了,请问一下为什么服务器建一次之后就再也成功不了了。。...
  2. 基于Reddsion分布式的锁实现
  3. PMP中关于配置管理系统和配置管理项
  4. SpringBoot实现过滤器、拦截器与切片源码分析
  5. Win10专业版系统PyCharm专业版使用WSL(ubuntu20.04 LTS)配置Docker解释器配置环境详细教程
  6. npm run dev (明明有.vue文件),却报错 cannot GET
  7. 【LeetCode】剑指 Offer 51. 数组中的逆序对
  8. 软件测试——闭着眼睛测试软件
  9. 将截断字符串或二进制数据 语句已终止
  10. DirectX11 SDK 下载地址
  11. 有没有能PC远程控制安卓手机的App?AirDroid实现PC远程控制安卓
  12. c#学习笔记之Application.DoEvents应用
  13. 未来IT人才市场最热门的12项技能
  14. 推荐的去广告最佳的浏览器和插件
  15. java文档中心_Java文档 - SendCloud 文档中心 - SendCloud 文档中心
  16. Learn OpenGL 笔记5.11 Anti Aliasing(抗锯齿)
  17. 企业文化如何推动绩效?
  18. matlab 表示希腊字母yita,常用希腊字母读法
  19. Excel切片器的使用
  20. BLT-HC05 BLE蓝牙模块设置AT模式和比特率方法

热门文章

  1. NHibenate 一些自带增删改查
  2. log4j详解与实战
  3. python计算运动会某个参赛选手的得分。数据保存在文件中_Python基础教程之第二章---变量和字符串(1) 搬运...
  4. hdu 4309 最大流 + DFS
  5. C语言经典例74-连接两个链表
  6. 【运筹学】运输规划 ( 运输规划问题模型及变化 | 表上作业法引入 )
  7. 【组合数学】组合恒等式 ( 变下项求和 3 组合恒等式 | 变下项求和 4 组合恒等式 | 二项式定理 + 求导 证明组合恒等式 | 使用已知组合恒等式证明组合恒等式 )
  8. 【计算机网络】计算机网络 OSI 参考模型 ( 计算机网络分层结构 | OSI 七层参考模型 | 应用层 | 表示层 | 会话层 | 传输层 | 网络层 | 数据链路层 | 物理层 )
  9. APP多版本共存,服务端如何兼容?
  10. PE文件数字签名信息读取存储及格式具体解释图之上(历史代码,贴出学习)