现在的位置: 首页 > 综合 > 正文

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

2012年11月21日 ⁄ 综合 ⁄ 共 3226字 ⁄ 字号 评论关闭

服务器送给客户端的数据包类型可以是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();

抱歉!评论已关闭.