response下载文件 (转载)
核心代码:
DataSet ds = dBll.GetList( "ID=" + ID); |
string docName = "a.doc" ; //文件名, |
byte [] file = ( byte [])ds.Tables[0].Rows[0][ "FContent" ]; // "FContent"类型为image string Type = checktype(docName); Response.AddHeader( "Content-Disposition" , "attachment;filename=" + HttpUtility.UrlEncode(docName, System.Text.Encoding.UTF8).Replace( "+" , "%20" )); Response.AddHeader( "Content-Length " , file.Length.ToString()); Response.ContentType = Type; Response.BinaryWrite(file); //可以下载二进制文件,如数据库存的image //Response.WriteFile(fliePath);可以下载路径文件 Response.End(); Response.Clear(); /// <summary> /// 根据文件的扩展名来获取对应的“输出流的HTTP MIME“类型 /// </summary> /// <param name="filename"></param> /// <returns></returns> private string checktype( string filename) { string ContentType; switch (filename.Substring(filename.LastIndexOf( "." )).Trim().ToLower()) { case ".asf " : ContentType = "video/x-ms-asf " ; break ; case ".avi " : ContentType = "video/avi " ; break ; case ".doc " : ContentType = "application/msword " ; break ; case ".zip " : ContentType = "application/zip " ; break ; case ".xls " : ContentType = "application/vnd.ms-excel " ; break ; case ".gif " : ContentType = "image/gif " ; break ; case ".jpg " : ContentType = "image/jpeg " ; break ; case "jpeg " : ContentType = "image/jpeg " ; break ; case ".wav " : ContentType = "audio/wav " ; break ; case ".mp3 " : ContentType = "audio/mpeg3 " ; break ; case ".mpg " : ContentType = "video/mpeg " ; break ; case ".mepg " : ContentType = "video/mpeg " ; break ; case ".rtf " : ContentType = "application/rtf " ; break ; case ".html " : ContentType = "text/html " ; break ; case ".htm " : ContentType = "text/html " ; break ; case ".txt " : ContentType = "text/plain " ; break ; default : ContentType = "application/octet-stream " ; break ; } return ContentType; } |
HttpUtility.UrlEncode(docName, System.Text.Encoding.UTF8).Replace("+", "%20"));这个可以解决中文文件名中包含空格的问题,UrlEncode编码后会把文件名中的空格转换中+(+转换为%2b),但是浏览器是不能理 解加号为空格的,所以在浏览器下载得到的文件,空格就变成了加号;
解决办法:UrlEncode 之后, 将 “+” 替换成 “%20″,因为浏览器将%20转换为空格
response下载文件 (转载)的更多相关文章
- Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载
使用Response下载文件,servlet中的文件下载是通过流来实现的 我在webRoot文件夹下新建了一个文件夹from,里边放了一张图片,这里就以下载这张图片为例:download.jsp很 ...
- servlet 中通过response下载文件
public class ResponseDemo3 extends HttpServlet { private static final long serialVersionUID = -52329 ...
- ajax请求不能下载文件(转载)
最近在做文件下载,后台写了个控制层,直接走进去应该就可以下载文件,各种文件图片,excel等 但是起初老是下载失败,并且弹出下面的乱码: 前台请求代码: $('#fileexcel').unbind( ...
- ajax中没法用response下载文件啊
ajax 下载不太现实第一,http 不支持直接的二进制传输,二进制数据需要编码 例如base64 ,这点服务器端可以实现第二,客户端获得编码后的文件要转换,js应该也可以第三点,最为致命,js无法操 ...
- response 下载文件
String basePath = "D://test.json"; String filename = basePath.substring(basePath.lastIndex ...
- ASP.NET Response 下载文件
private void DownLoad(string fileName, string path) { FileInfo fi = new FileInfo(path); if (fi.Exist ...
- response 下载文件火狐浏览器文件名乱码问题
string path = Server.MapPath(Url.Content("~/") + "UploadFiles/Template/"); ...
- Ajax下载文件(页面无刷新)
说明:Ajax是无法实现文件传输的,本文只是模拟了Ajax不刷新页面就可以请求并返回数据的效果.实质上还是通过提交form表单来返回文件流的输出. 分步实现逻辑: ajax请求服务器,访问数据库,根据 ...
- Servlet 上传下载文件
上传文件 1)在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮 2)表单需要上传文件时,需指定表单 enctype 的值 ...
随机推荐
- Dynamics AX 2012 R2 为运行失败的批处理任务设置预警
我们主要有两种类型的系统监视:环境健康监视和性能监视. 环境健康监视一般对系统性能影响非常小,是为了提醒潜在的问题. 性能监视通常更有侵入性.监视期间,添加一个负载到环境.因此,它可以回答特定的问题或 ...
- android在全屏下第一次触摸屏幕没有触发事件
A.设置全屏的方法很多就不多说了,常见如下两种(记录用以备忘): 1.在Androidmanifest.xml文件中设定,如: <activity android:name="com. ...
- 【Redis】Redis的基本安装及使用
在Linux上安装Redis Redis的安装很简单.基本上是下载.解压.运行安装脚本.我用的Redis版本是3.2.1. [nicchagil@localhost app]$ wget -q htt ...
- WPF里的报警闪烁效果
<esri:MarkerSymbol x:Key="FlashMarkerSymbol" OffsetX="41" OffsetY="41&qu ...
- mysql中查询语句中的一个知识点说明
1, 简单说明. select * from tb_name where 1[不为零即可];则会显示所有记录,select * from tb_name where 0;则不显示任何记录 假设数据库中 ...
- Chrome浏览器快捷键大全(新加了其他一些浏览器的独有)
官方快捷键文档: https://support.google.com/chrome/answer/157179?hl=zh-Hans&ref_topic=14676 浏览器标签页和窗口快 ...
- 微信小程序配置文件
app.json 配置文件中不能有注释 { "pages": [ // 必填 设置页面路径 "pages/index/index", "pages ...
- 《BI那点儿事》数据流转换——百分比抽样、行抽样
百分比抽样和行抽样可以从数据源中随机选择一组数据.这两种task都可以产生两组输出,一组是随机选择的,另一组是没有被选择的.可以将这些选择出的数据发送到开发或者测试服务器上.这个Task的最合适的应用 ...
- socket详解(一)《转》
在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器 ...
- ~是什么意思 在C语言中,~0代表什么
是c语言中的位运算符:取反.0在内存中的存储方式是所有位为0,0000000000000000那么按位取反后位16个1(如果整形在你的机器上站16位),那么表示的数为-1.