
正文
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转换为空格







