使用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)


相关推荐

  • pytorch tensor操作:tensor与numpy转换

    pytorch tensor操作:tensor与numpy转换tensor转numpyt=torch.ones(5)print(f”t:{t}”)n=t.numpy()print(f”n:{n}”)输出:t:tensor([1.,1.,1.,1.,1.],dtype=torch.float64)n:[2.2.2.2.2.]cpu上的tensor可以和numpyarray共享内存地址,改变其中的一个另一个也会改变t.add_(1)print(f”t:{t}”)print(f”n:{n}”)输出:t:

    2022年10月19日
  • 如何屏蔽SIGPIPE信号

    如何屏蔽SIGPIPE信号#include<stdlib.h>#include<sys/signal.h>//默认读写一个关闭的socket会触发sigpipe信号该信号的默认操作是关闭进程这明显是我们不想要的//所以我们需要重新设置sigpipe的信号回调操作函数比如忽略操作等使得我们可以防止调用它的默认操作//信号的处理是异步操作也就是说在这一条语句以后继续往下执行中如果碰到信号依旧会调用信号的回调处理函数//处理sigpipe信号voidhandle_for_s

  • Hadoop学习之编译eclipse插件

    Hadoop学习之编译eclipse插件

  • [已解决]踩过的坑之mysql连接报“Communications link failure”错误

    [已解决]踩过的坑之mysql连接报“Communications link failure”错误目录前言第一种方法:第二种方法第三种方法(适用于项目和数据库在同一台服务器)第四种方法第五种方法(项目和数据库不在同一台服务器)总结前言先给大家简述一下我的坑吧,(我用的是mysql,至于oracle有没有这样的问题,有心的小伙伴们可以测试一下哈),在自己做个javaweb测试项目的时候,因为买的是云服务器,所以数据库连接的是用ip地址,用IDE开发好…

  • servlet与jsp的区别

    servlet与jsp的区别

  • 持续集成架构图_过程集成

    持续集成架构图_过程集成

    2022年10月30日

发表回复

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

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