asp文件上传和下载

2023-05-16

ASP.NET实现上传文件

       前端

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

           

       代码:     

 

[html] view plain copy 在CODE上查看代码片派生到我的代码片

  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 在CODE上查看代码片派生到我的代码片

  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.             //向数据库中存储相应通知的附件的目录  
  17.             BLL.news.InsertAnnexBLL insertAnnex = new BLL.news.InsertAnnexBLL();  
  18.             AnnexEntity annex=new AnnexEntity();     //创建附件的实体  
  19.             annex.AnnexName=fileName;               //附件名  
  20.             annex.AnnexContent=saveFileName;        //附件的存储路径  
  21.             annex.NoticeId = noticeId;              //附件所属“通知”的ID在这里为已知  
  22.             insertAnnex.InsertAnnex(annex);         //将实体存入数据库(其实就是讲实体的这些属性insert到数据库中的过程,具体BLL层和DAL层的代码这里不再多说)  
  23.         }  
  24.         else  
  25.         {  
  26.             Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('请选择正确的格式');</script>");  
  27.         }  
  28.     }  

 

 

 

 

          ASP.NET实现下载文件

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

            

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

        

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

       

 

       前台:       

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

       代码:

 

[html] view plain copy 在CODE上查看代码片派生到我的代码片

  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 在CODE上查看代码片派生到我的代码片

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

 

 

          

         控制上传文件的大小     

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

 

[html] view plain copy 在CODE上查看代码片派生到我的代码片

  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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

asp文件上传和下载 的相关文章

随机推荐

  • nvm常用命令,配置镜像

    1 配置镜像 阿里云 nvm npm mirror https npmmirror com mirrors npm nvm node mirror https npmmirror com mirrors node 腾讯云 nvm npm m
  • 汇编语言中MOV和OFFSET指令的两个问题?

    xff08 1 xff09 往段寄存器送段地址时要写成 MOV AX DATA MOV DS AX 不能写成 MOV DS DATA 这是为什么 xff1f 有人说由于段寄存只能进行16位的读写 xff0c 因此需要用ax来倒一下 xff0
  • C++动态链接库的制作

    输入函式 declspec dllimport 与输出函式 declspec dllexport 有什么区别呢 xff1f 我知道他们不同 xff0c 但差别在哪呢 我用的全是 declspec dllexport xff0c declsp
  • C#调用C++函数来与串口通信

    前些日子帮朋友写个小软件 xff0c 要求用C 来实现主程序 xff0c 主要的功能是与一些通信设备打交道 xff0c 当然就是通过串口了 xff0c 以十进制发送和读取串口 的数据 xff0c 考虑到C 调用API并没有C 43 43 来
  • c++获取系统错误提示!getLastError()

    void showError LPVOID lpMsgBuf FormatMessage FORMAT MESSAGE ALLOCATE BUFFER FORMAT MESSAGE FROM SYSTEM FORMAT MESSAGE IG
  • c++串口操作

    0 前言 做串口方面的程序 xff0c 使用CreateFile打开串口通信端口 在对串口操作之前 xff0c 需要首先打开串口 使用C 43 43 进行串口编程 xff0c 如果采用VS开发 xff0c 则可以直接借助于串口通信控件来操作
  • vs环境下C++dll生成和使用(基础篇)

    动态库和静态库 xff1a 动态库 xff1a 全名动态链接库 xff0c 用于将你的函数封装 xff0c 让别人只能调用 xff0c 不能看你的实现代码 由引入库和dll组成 xff1a 引入库包含导出的函数和变量名 xff0c dll包
  • #ifndef.#define, #endif 的用法

    文件中的 ifndef define endif 很关键 xff0c 是为了避免多重包含 xff0c 比如如果两个C文件同时包含同一头文件 xff0c 那么就会出现问题 xff0c 所以使用这种方法可以有效避免这种情况 一般用法 xff1a
  • 关于.NET编译的目标平台(AnyCPU,x86,x64)

    在VisualStudio中项目平台属性包含x86 x64 AnyCPU三个选项 xff0c 之前的项目中并没有特别去关注这一点 xff0c 最近的项目中涉及到了在不同平台运行的问题 xff0c 所以专门了解并整理了这方面的知识 x86 x
  • IP地址不是唯一的吗?为什么路由器的IP地址都是这样的呢?

    路由器同时连接外部网络和内部网络 xff0c 外部网络的IP是都不一样 xff0c 但内部网络的IP xff0c 就没有问题 xff0c 但内部网络所有设备的IP也不能相同 域名是对你的网站存放主机的ip的解析 xff0c 可以理解为你的别
  • HTTP简介

    HTTP协议是Hyper Text Transfer Protocol xff08 超文本传输协议 xff09 的缩写 是用于从万维网 xff08 WWW World Wide Web xff09 服务器传输超文本到本地浏览器的传送协议 H
  • OMF和flash_recovery_area的关系!

    在OMF出现之前 9i R1 oracle db的文件 xff0c 主要指dbf xff0c redo xff0c ctl是通过os管理的 xff0c 为了简化对数据库文件的管理 xff0c oracle引入了OMF 通过omf创建的dbf
  • asp.net发布网站的详细步骤

    1 用VS2013打开解决方案 2 选中解决方案 xff0c 点击鼠标 右键 gt 从弹出对话框中 xff0c 选择 清理解决方案 3 待第2步 清理解决方案 结束后 xff0c 选中 解决方案 gt 点击鼠标 右键 gt 在弹出对话框中
  • 域名和IP地址是一回事吗?建网站要买域名还要买IP地址吗?

    去年我在网通花了150元买了一个域名 xff0c 他们在登记单上的域名费一栏填了150元 xff0c 登记单上还有IP使用费一栏他们什么也没有填写 xff0c 如果域名与IP地址是同一个项目 xff0c 是一回事 xff0c 他们不是在重复
  • IIS服务器绑定域名问题

    不能将内网的IP地址和互联网的域名绑定 xff0c 如果这样做 xff0c 那么只有内网可以通过域名访问网站 xff0c 外网无法通过域名访问网站 域名ip地址绑定 xff0c 必须是固定ip地址 xff0c 还必须是公网ip地址 需要公网
  • asp网站配置错误解决汇总_1

    由于扩展配置问题而无法提供您请求的页面 如果该页面是脚本 请添加处理程序 错误 xff1a HTTP 错误 404 3 Not Found 由于扩展配置问题而无法提供您请求的页面 如果该页面是脚本 xff0c 请添加处理程序 如果应下载文件
  • 如何在本地服务器绑定域名及host文件的使用说明

    在本地服务器绑定域名 xff1a 打开C WINDOWS system32 drivers etc 目录下面的hosts文件 xff0c 把127 0 0 1 localhost复制 xff0c 粘贴到文件的最后 xff0c 然后把loca
  • 内网访问不到内网网站问题和不用端口号访问网站问题

    windows防火墙 xff0d 高级 xff0d 网络连接设置 xff0d 设置 xff0d 服务 xff0d web服务器 xff0c 在这个位置可以打开80端口 怎样让自建网站在内外网访问时不用加端口名 怎样让自建网站在内外网访问时不
  • vs2010本地调试打不开网页

    在C WINDOWS system32 drivers etc这个文件夹下 找到Hosts文件 用记事本打开 localhost设为127 0 0 1
  • asp文件上传和下载

    ASP NET实现上传文件 前端 界面十分简单 xff0c 只是放一个file类型的 lt input gt 和一个按钮 xff0c 并且为这个按钮添加点击事件 xff08 btnUpLoad Click xff09 xff0c 如下图 x