ASP.NET 在下载文件时对其重命名的思路及实现方法_实用技巧

有些时候为了保证文件再上传时不会覆盖掉之前上传的文件,同时由于上传的目标目录里的文件可能很多,这个时候一个一个查是不太好的事情,所以这里可以自动生成GUID使文件名重命名成GUID_原来的名称.扩展名。但是在下载的时候最好可能保证恢复到原来的名称。这个时候听伤神的。搜了一下相关资料后得知可使用response来解决。具体代码如下。

[csharp] 

复制代码 代码如下:

<pre name="code" class="csharp">string path = Server.MapPath("aa\\ahaakladahsasdas_bb.zip"); 
            string newfileName = ""; 
            if (File.Exists(path)) 
            { 
                FileInfo fi = new FileInfo(path); 
                Response.Clear();//Clear 方法删除缓冲区中的所有 HTML 输出。但 Clear 方法只删除响应正文 
                //而不删除响应标题。可以用该方法处理错误情况。 
                Response.ClearHeaders(); 
                Response.Buffer = false;//这句话的意思就是指明输出页面是否被缓冲,当属性值为True时, 
                //服务器将不会向客户端发送任何信息,直到所有程序执行完或者遇到  
                //Response.Flush或Response.End语句,才会释放缓冲区的信息。 
                string filename = Path.GetFileName(path); 
                newfileName = newfileName + filename.Substring(filename.LastIndexOf(".")); 
                Response.Clear(); 
                Response.ClearHeaders(); 
                Response.Buffer = false; 

                newfileName = HttpUtility.UrlEncode(newfileName);// 这一步弹出下载保存的对话框,出现文件名乱码,但变量中的文件名是正常的。   
                Response.AppendHeader("Content-Disposition", "attachment;filename=" + newfileName);//为用户保存文件是显示的名称 
                //告诉客户端这个响应内容的类型为attachment 你是通过Response.AppendHeader("content-type", "attachment"); 申明的。 

                Response.AppendHeader("Content-Length", fi.Length.ToString()); 
                Response.ContentType = "application/octet-stream"; 
                Response.WriteFile(newfileName);//用response来返回文件的路径   
                Response.Flush();//清空response   
                Response.End(); 
                //Response.End(); 如果抛异常的话可使用 
                //HttpContext.Current.ApplicationInstance.CompleteRequest(); 
            } 
            else 
            { 
                Response.Write("<script langauge=javascript>alert(‘文件不存在!');</script>"); 
            }

</pre><br> 
<br> 
<pre></pre> 
<p></p> 
<pre></pre> 
<p></p> 
<pre></pre> 

时间: 2024-11-01 12:24:22

ASP.NET 在下载文件时对其重命名的思路及实现方法_实用技巧的相关文章

asp.net实现上传图片时判断图片的模式GRB或CMYK的方法_实用技巧

本文实例讲述了asp.net实现上传图片时判断图片的模式GRB或CMYK的方法.分享给大家供大家参考,具体如下: Bitmap bmp = new Bitmap(allow_fileStream); //文件路径 allowUpload = stringHelper.IsCMYK(bmp) == "true" ? false : true; //返回true字符串则图片不是RGB模式的 public string IsCMYK(System.Drawing.Image img) { s

ASP.NET中常见文件类型、扩展名、存放位置及用途总结_实用技巧

.asax 应用程序根目录. 通常是 Global.asax 文件,该文件包含从 HttpApplication 类派生并表示该应用程序的代码. 有关更多信息,请参见 Global.asax 语法. .ascx 应用程序根目录或子目录. Web 用户控件文件,该文件定义自定义.可重复使用的用户控件. 有关更多信息,请参见 ASP.NET 用户控件. .ashx 应用程序根目录或子目录. 一般处理程序文件,该文件包含实现 IHttpHandler 接口以处理所有传入请求的代码. 有关更多信息,请参

asp.net表单提交时防重复提交并执行前台的JS验证_实用技巧

在项目开发中,遇到这样的一个情况,就是用户重复提交.当然这个不能怪用户,只能怪.NET或者服务器反应迟钝......我是这样理解的. 在网上搜了一下,解决方案是不少,比如: http://bbs.csdn.net/topics/340048988 (这个大家提了不少建议) http://www.cnblogs.com/blsong/archive/2009/12/24/1631144.html (这个基本上总结了网上的方法) 但实际上做互联网web项目中,需要在前台执行JS或者Jquery的验证

asp.net运行提示未将对象引用设置到对象的实例错误解决方法_实用技巧

未将对象引用设置到对象的实例 一.网络上的一般说法 1.ViewState对象为Null. 2.DateSet空. 3.sql语句或Datebase的原因导致DataReader空. 4.声明字符串变量时未赋空值就应用变量. 5.未用new初始化对象. 6.Session对象为空. 7.对控件赋文本值时,值不存在. 8.使用Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值. 9.使用FindControl时,控件不存在却没有做预处理. 10.重复定义造成未

ASP.NET在IE10中无法判断用户已登入及Session丢失问题解决方法_实用技巧

今天发现在IE10中登录我公司的一个网站时,点击其它菜单,页面总会自动重新退出到登录页,后检查发现,IE10送出的HTTP头,和.AUTH Cookie都没问题,但使用表单验证机制(FormsAuthentication)却无法判断该用户已登入,保存的Session总会丢失. 后查实这是ASP.NET 2.0,3.5和4.0的Bugs,因这些版本无法识别IE10的User-Agent标头字符串,所以无法识别用户浏览器的版本,从而导至了ASP.NET的特定功能失效,认为游览器不支持Cookies功

asp.net LC.exe已退出代码为 -1的原因分析及解决方法_实用技巧

可能的原因是: 这个第三方组件是个商业组件,他在组件的主使用类定义了 LicenseProvider(typeof(LicFileLicenseProvider)) 这个Attribute. VS2005在编译时检测到这个类的时候,会检查到组件使用的是LicFileLicenseProvider这个属性,表示有组件使用的是把许可的辅助信息保存在license.licx文件中,这个文件保存在vs2005中解决方案资源管理器中的Properties文件夹内. 这个文件的内容实际上是个引用,他保存着你

Asp.net中把Excel数据存储至SQL Server中的具体实现方法_实用技巧

ExcelWrapper 复制代码 代码如下:         /// <summary>        /// 查询EXCEL电子表格添加到DATASET        /// </summary>        /// <param name="filenameurl">文件路径</param>        /// <param name="table">dataset中的表名(并不是要和数据库中的表

ASP.NET批量下载文件的方法_实用技巧

本文实例讲述了ASP.NET批量下载文件的方法.分享给大家供大家参考.具体方法如下: 一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到客户端.最后删除临时文件夹.  二.代码实现 1.ASP.NET批量下载 核心代码 复制代码 代码如下: //遍历服务器指定文件夹下的所有文件 string path = "uploads/Image/"

ASP.Net下载大文件的实现方法_实用技巧

本文实例讲述了ASP.Net下载大文件的实现方法.分享给大家供大家参考.具体分析如下: 当我们的网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 1. 将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据. 2. 根据下载的文件类型来指定 Response.ContentType .(参考OSChina的这个网址可以找到大部分文件类型的对照表:http://tool.oschi