大家好,又见面了,我是你们的朋友全栈君。
服务器送给客户端的数据包类型可以是text/html文本,也可以是gif/jpeg图形文件,所以每次传输前,我们都必须告知客户端将要传输的文件类型,一般默认情况下为“Text/Html”类型。
<
% Response.ContentType
=
“
text/HTML
“
%
>
2
<
% Response.ContentType
=
“
image/GIF
“
%
>
3
<
% Response.ContentType
=
“
image/JPEG
“
%
>
4
<
% Response.ContentType
=
“
text/plain
“
%
>
5
<
% Response.ContentType
=
“
image/JPEG
“
%
>
6
<
% Response.ContentType
=
“
application/x-cdf
“
%
>
用于作为文本内容返回而不是已解释的 HTML 语句
Response.ContentType = “text/plain”
<
%
2
Response.ContentType
=
“
text/plain
“
3
Response.write(
now
()
&
“
会被执行么?
“
)
4
%
>
你可以注意到:页面提供下载,页面中的ASP内容被解释执行了的
程序文件以XLS文件被提供下载
Response.ContentType = “application/vnd.ms-excel”
<
%
2
Response.ContentType
=
“
application/vnd.ms-excel
“
3
Response.write(
“
本页面调试会出现下载对话框提供下载,保存类型为XLS
“
)
4
%
>
实现歌曲连续播放
response.ContentType=”audio/x-pn-realaudio”
2
<
%
3
dim
ramstr
4
ramstr
=
“”
5
set
rs
=
server.createobject(
“
adodb.recordset
“
)
6
sql
=
“
XXXXXXXXXXX
“
7
rs.open sql,conn,
1
,
3
‘
conn已定义
8
do
while
not
rs.eof
9
ramstr
=
ramstr
&
rs(
“
url
“
)
&
vbCrLf
10
rs.movenext
11
loop
12
rs.close
13
response.ContentType
=
“
audio/x-pn-realaudio
“
14
‘
response.ContentType=”audio/x-mpegurl”
15
response.write ramstr
16
%
>
response.write 输出的时候,由于定义了response.ContentType 所以输出歌曲地址的时候会自动调用符合相应格式的软件来播放歌曲,不过前提是播放歌曲的软件必须先安装的。
如何利用ContentType 来,在服务器上提供一个.xls后缀的文件点击下载而不是直接在浏览器中打开。(注意:于上程序文件以XLS文件被提供下载有所不同)
Response.ContentType = “application/x-download”,让整个程序文件点击下载了。怎么办好呢???
解决方案: 利用Response.WriteFile的文件输出操作
具体在按钮点击事件中添加一下代码
private
void btnDownload_Click(
object
sender, System.EventArgs e)
2
{
3
string
DownloadFileName
=
Server.MapPath(
“
file.xls
“
);
4
string
filepath
=
DownloadFileName;
5
6
//
Identify the file name.
7
string
filename
=
System.IO.Path.GetFileName(filepath);
8
9
Response.Clear();
10
11
//
Specify the Type of the downloadable file.
12
Response.ContentType
=
“
application/octet-stream
“
;
13
14
//
Set
the Default file name in the FileDownload dialog box.
15
Response.AddHeader(
“
Content-Disposition
“
,
“
attachment; filename=
“
+
filename);
16
17
Response.Flush();
18
19
//
Download the file.
20
Response.WriteFile(filepath);
21
}
以上代码也适合用于小于100MB的小文件下载
如果是大于100MB的大文件下载可以用Response.FileStream 。
C#代码如下:(将 DownloadFileName 替换为大于 100 MB 的文件的名称。)
System.IO.Stream iStream
=
null
;
2
3
//
Buffer to read 10K bytes in chunk:
4
byte
[] buffer
=
new
Byte[
10000
];
5
6
//
Length of the file:
7
int
length;
8
9
//
Total bytes to read:
10
long
dataToRead;
11
12
//
Identify the file to download including its path.
13
string
filepath
=
“
DownloadFileName
“
;
14
15
//
Identify the file name.
16
string
filename
=
System.IO.Path.GetFileName(filepath);
17
18
try
19
{
20
//
Open the file.
21
iStream
=
new
System.IO.FileStream(filepath, System.IO.FileMode.Open,
22
System.IO.FileAccess.Read,System.IO.FileShare.Read);
//
用文件流来处理
23
24
25
//
Total bytes to read:
26
dataToRead
=
iStream.Length;
27
28
Response.ContentType
=
“
application/octet-stream
“
;
//
问题就在这里,解决百M关口
29
Response.AddHeader(
“
Content-Disposition
“
,
“
attachment; filename=
“
+
filename);
30
31
//
Read the bytes.
32
while
(dataToRead
>
0
)
33
{
34
//
Verify that the client is connected.
35
if
(Response.IsClientConnected)
36
{
37
//
Read the data in buffer.
38
length
=
iStream.Read(buffer,
0
,
10000
);
39
40
//
Write the data to the current output stream.
41
Response.OutputStream.Write(buffer,
0
, length);
42
43
//
Flush the data to the HTML output.
44
Response.Flush();
45
46
buffer
=
new
Byte[
10000
];
47
dataToRead
=
dataToRead
–
length;
48
}
49
else
50
{
51
//
prevent infinite loop if user disconnects
52
dataToRead
=
–
1
;
53
}
54
}
55
}
56
catch
(Exception ex)
57
{
58
//
Trap the error, if any.
59
Response.Write(
“
Error :
“
+
ex.Message);
60
}
61
finally
62
{
63
if
(iStream
!=
null
)
64
{
65
//
Close the file.
66
iStream.Close();
转载于:https://www.cnblogs.com/meil/archive/2011/01/24/1113802.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161612.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...