ASP.NET文件上传和下载
大学最近作出相关的需求进行上传和下载文件的网站(求为:站点发布的通知,在后台要能给每一个通知加入附件。在前台要能显示并下载附件),之前仅仅是学习过关于上传的 理论知识,这里实践了一下下,与大家分享一下成果。
事先说明:这个样例採用的是简单的三层结构,层与层之间是用实体来传值。
并且这样的方法不但在本地測试时能够成功,并且能够部署在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文件上传和下载相关推荐
- ASP.NET 文件上传于下载
本文主要介绍一下,在APS.NET中文件的简单上传于下载,上传是将文件上传到服务器的指定目录下,下载是从存入数据库中的路径,从服务器上下载. 1.上传文件 (1)页面代码 <table alig ...
- asp.net 文件上传和下载管理源码
利用asp.net进行文件上传和下载时非常常用的功能,现做整理,将源码上传,提供给初学者参考,以下代码中的样式文件就不上传了,下载者请将样式去掉. 效果图如下: <%@ Page Languag ...
- 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载
效果图 上传文件页面: 下载文件页面: 1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="t ...
- [转载]ASP.NET Core文件上传与下载(多种上传方式)
ASP.NET Core文件上传与下载(多种上传方式) 前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理 ...
- ASP.NET MVC实现简单的文件上传与下载
使用ASP.NET MVC实现简单的文件上传与下载. 1.上传文件HTML <form action='@Url.Action("Upload", "File&qu ...
- asp.net coree文件上传与下载实例
asp.net core像springboot非常相似,我们从一个springboot文件上传与下载的例子来引到asp.net core的文件上传与下载: 本文asp.net core版本为:6.0 ...
- 超详细的文件上传和下载(Spring Boot)
超详细的文件上传和下载 前言Ⅰ:@RequestParam和@RequestPart的区别 @RequestPart @RequestPart这个注解用在multipart/form-data表单提交 ...
- Internet Explorer 各版本文件上传和下载限制
在过去的几年中,我们对WinINET的文件上传和下载限制有一些疑问.我在下表中总结了这些限制: 文件上传和下载限制 上传(总大小) 下载(每个文件) Internet Explorer 6 2GB 2 ...
- Angular 文件上传与下载
Angular文件上传与下载 文件上传 方式1 使用NG ZORRO中的组件. 文件下载 方式1 直接下载 方式2 通过HTTP请求后端数据的方式进行下载 文件上传 方式1 使用NG ZORRO中的组 ...
最新文章
- 饥荒自建服务器崩了之后没有记录了,请问一下为什么服务器建一次之后就再也成功不了了。。...
- 基于Reddsion分布式的锁实现
- PMP中关于配置管理系统和配置管理项
- SpringBoot实现过滤器、拦截器与切片源码分析
- Win10专业版系统PyCharm专业版使用WSL(ubuntu20.04 LTS)配置Docker解释器配置环境详细教程
- npm run dev (明明有.vue文件),却报错 cannot GET
- 【LeetCode】剑指 Offer 51. 数组中的逆序对
- 软件测试——闭着眼睛测试软件
- 将截断字符串或二进制数据 语句已终止
- DirectX11 SDK 下载地址
- 有没有能PC远程控制安卓手机的App?AirDroid实现PC远程控制安卓
- c#学习笔记之Application.DoEvents应用
- 未来IT人才市场最热门的12项技能
- 推荐的去广告最佳的浏览器和插件
- java文档中心_Java文档 - SendCloud 文档中心 - SendCloud 文档中心
- Learn OpenGL 笔记5.11 Anti Aliasing(抗锯齿)
- 企业文化如何推动绩效?
- matlab 表示希腊字母yita,常用希腊字母读法
- Excel切片器的使用
- BLT-HC05 BLE蓝牙模块设置AT模式和比特率方法
热门文章
- NHibenate 一些自带增删改查
- log4j详解与实战
- python计算运动会某个参赛选手的得分。数据保存在文件中_Python基础教程之第二章---变量和字符串(1) 搬运...
- hdu 4309 最大流 + DFS
- C语言经典例74-连接两个链表
- 【运筹学】运输规划 ( 运输规划问题模型及变化 | 表上作业法引入 )
- 【组合数学】组合恒等式 ( 变下项求和 3 组合恒等式 | 变下项求和 4 组合恒等式 | 二项式定理 + 求导 证明组合恒等式 | 使用已知组合恒等式证明组合恒等式 )
- 【计算机网络】计算机网络 OSI 参考模型 ( 计算机网络分层结构 | OSI 七层参考模型 | 应用层 | 表示层 | 会话层 | 传输层 | 网络层 | 数据链路层 | 物理层 )
- APP多版本共存,服务端如何兼容?
- PE文件数字签名信息读取存储及格式具体解释图之上(历史代码,贴出学习)