使用Response.ContentType 来控制下载文件的类型

使用Response.ContentType 来控制下载文件的类型服务器送给客户端的数据包类型可以是text/html文本,也可以是gif/jpeg图形文件,所以每次传输前,我们都必须告知客户端将要传输的文件类型,一般默认情况下为“Text/Html”类型。1<%Response.ContentType=”text/HTML”%>2<%Response.ContentType=”image/GIF”%>3…

大家好,又见面了,我是你们的朋友全栈君。

服务器送给客户端的数据包类型可以是text/html文本,也可以是gif/jpeg图形文件,所以每次传输前,我们都必须告知客户端将要传输的文件类型,一般默认情况下为“Text/Html”类型。


1
<
% 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”


1
<


2
Response.ContentType
=


text/plain



3
Response.write(
now
()
&

会被执行么?

)

4

>

你可以注意到:页面提供下载,页面中的ASP内容被解释执行了的

程序文件以XLS文件被提供下载

Response.ContentType = “application/vnd.ms-excel”


1
<


2
Response.ContentType
=


application/vnd.ms-excel



3
Response.write(

本页面调试会出现下载对话框提供下载,保存类型为XLS

)

4

>

实现歌曲连续播放

response.ContentType=”audio/x-pn-realaudio”


1


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的文件输出操作

具体在按钮点击事件中添加一下代码


1
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 的文件的名称。)


1
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账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号