asp文件上传和下载
ASP.NET实现上传文件
前端
界面十分简单,只是放一个file类型的<input>和一个按钮,并且为这个按钮添加点击事件(btnUpLoad_Click),如下图:
代码:
[html] view plain copy
- <input id="UpLoad" type="file" runat="server" />
- <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
- 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")
- {
- //将文件保存在服务器中根目录下的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控件来显示多个附件:
代码:
[html] view plain copy
- <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下载实例》):
[csharp] view plain copy
- using System.IO;
- protected void lbtnDownLoad_Command(object sender, CommandEventArgs e)
- {
- // 定义文件名
- string fileName = "";
- // 获取文件在服务器的地址
- 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节点中加入如下属性即可:
[html] view plain copy
- <configuration>
- <system.web>
- <httpRuntime executionTimeout="300" maxRequestLength="51200" useFullyQualifiedRedirectUrl="false" />
- </system.web>
- </configuration>
executionTimeout 属性的值是 ASP.NET 关闭前允许发生的上载秒数,maxRequestLength指限制上传文件的大小,useFullyQualifiedRedirectUrl指示客户端重定向是否是完全限定的,或者指示是否代之以将相对重定向发送到客户端。
参考:http://blog.csdn.net/huyuyang6688/article/details/40785429
asp文件上传和下载相关推荐
- 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载
效果图 上传文件页面: 下载文件页面: 1.母版页site.Master <%@ Master Language="C#" AutoEventWireup="t ...
- [转载]ASP.NET Core文件上传与下载(多种上传方式)
ASP.NET Core文件上传与下载(多种上传方式) 前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理 ...
- ASP.NET 文件上传于下载
本文主要介绍一下,在APS.NET中文件的简单上传于下载,上传是将文件上传到服务器的指定目录下,下载是从存入数据库中的路径,从服务器上下载. 1.上传文件 (1)页面代码 <table alig ...
- asp.net 文件上传和下载管理源码
利用asp.net进行文件上传和下载时非常常用的功能,现做整理,将源码上传,提供给初学者参考,以下代码中的样式文件就不上传了,下载者请将样式去掉. 效果图如下: <%@ Page Languag ...
- 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中的组 ...
最新文章
- blue pill Flash 128KB的传言
- 巧用Windows server 2008密码重置盘
- 测试管理 | 基于风险的测试
- python 状态机_Python 状态机
- canvas转化为图片并下载
- 过去一年,被我们“高估”的技术清单
- High Availability手册(3): 配置
- 现在动手,建立你的灾备系统
- 快速给视频批量添加水印,操作简单
- C# winform国际版,中英文转换
- 大数据职业理解_大数据的职业发展规划
- 老九学堂 学习 C++ 第四天
- Spring Boot+Vue+阿里云OOS实现图片上传
- Marvell 88E1111PHY芯片简介
- html中图片鼠标滑动的效果,JS DOM实现鼠标滑动图片效果
- 8款最佳的开源在线学习CMS系统
- HashCat配GPU
- 栈展开(stack unwinding)
- 前端 数组转字符串,字符串转数组
- 科普 | 区块链概念最全解析:区块链的下一个十年什么样?
热门文章
- 怎么把程序内部坐标转为屏幕坐标_全网最详细CNC加工中心程序代码大全!
- java 8 并行_Java 8新特性之 并行和并行数组(八恶人-8)
- 用C语言写HMI程序,HMI画面元素组成设计及代码生成方法与流程
- 计算机编码发明者,“自然码”的发明者周志农在从计算机*毕业后的,才有了第一只...
- 缺货大环境下,假货防不胜防,我们又该怎样分辨真假芯片?
- C和C++太难了。。搞这个方向进大厂它不香吗?
- 为什么C和C++难以被取代?
- 国产操作系统要起来,这款Linux是你的菜吗?
- 论基于candence的组装清单做法
- linux环境下配置虚拟主机域名,Linux下三种虚拟主机的配置方法