Response.ContentType :控制輸出的文件類型

服務器送給客戶端的數據包類型可以是text/html文本,也可以是gif/jpeg圖形文件,所以每次傳輸前,我們都必須告知客戶端將要傳輸的文件類型,一般默認情況下爲“Text/Html”類型。
<% Response.ContentType = "text/HTML" %>
<% Response.ContentType = "p_w_picpath/GIF" %>
<% Response.ContentType = "p_w_picpath/JPEG" %>
<% Response.ContentType = "text/plain" %>
<% Response.ContentType = "p_w_picpath/JPEG" %>
<% Response.ContentType = "application/x-cdf" %>
用於作爲文本內容返回而不是已解釋的 HTML 語句
Response.ContentType = "text/plain"



<% 
Response.ContentType = "text/plain" 
Response.write(now()&"會被執行麼?")
%>


你可以注意到:頁面提供下載,頁面中的ASP內容被解釋執行了的

程序文件以XLS文件被提供下載
Response.ContentType = "application/vnd.ms-excel"



<%
Response.ContentType = "application/vnd.ms-excel"
Response.write("本頁面調試會出現下載對話框提供下載,保存類型爲XLS")
%>



實現歌曲連續播放
response.ContentType="audio/x-pn-realaudio" 



<%
dim ramstr 
ramstr="" 
set rs=server.createobject("adodb.recordset") 
sql="XXXXXXXXXXX" 
rs.open sql,conn,1,3 'conn已定義 
do while not rs.eof 
ramstr=ramstr&rs("url")&vbCrLf 
rs.movenext 
loop 
rs.close 
response.ContentType="audio/x-pn-realaudio" 
'response.ContentType="audio/x-mpegurl" 
response.write ramstr 
%>



response.write 輸出的時候,由於定義了response.ContentType 所以輸出歌曲地址的時候會自動調用符合相應格式的軟件來播放歌曲,不過前提是播放歌曲的軟件必須先安裝的。
以上文章轉貼自[url]http://www.w269.com/infow269/1145w2691.htm[/url]
這裏我想討論一下,這麼也東東。

Q:如何利用ContentType 來,在服務器上提供一個.xls後綴的文件點擊下載而不是直接在瀏覽器中打開。(注意:於上程序文件以XLS文件被提供下載有所不同)

Response.ContentType = "application/x-download",讓整個程序文件點擊下載了。怎麼辦好呢???

A:解決方案1. 利用Response.WriteFile的文件輸出操作
具體在按鈕點擊事件中添加一下代碼
private void btnDownload_Click(object sender, System.EventArgs e)
  {
   string DownloadFileName=Server.MapPath("file.xls");
   string filepath = DownloadFileName;
   // Identify the file name.
   string filename = System.IO.Path.GetFileName(filepath);
   Response.Clear();
   // Specify the Type of the downloadable file.
   Response.ContentType = "application/octet-stream";
   // Set the Default file name in the FileDownload dialog box.
   Response.AddHeader("Content-Disposition", "p_w_upload; filename=" + filename);
   Response.Flush();
   // Download the file.
   Response.WriteFile(filepath);
  }
以上代碼也適合用於小於100MB的小文件下載
如果是大於100MB的大文件下載可以用Response.FileStream

C#代碼如下:(將 DownloadFileName 替換爲大於 100 MB 的文件的名稱。)

System.IO.Stream iStream = null;

// Buffer to read 10K bytes in chunk:
byte[] buffer = new Byte[10000];

// Length of the file:
int length;

// Total bytes to read:
long dataToRead;

// Identify the file to download including its path.
string filepath  = "DownloadFileName";

// Identify the file name.
string  filename  = System.IO.Path.GetFileName(filepath);

try
{
// Open the file.
iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
System.IO.FileAccess.Read,System.IO.FileShare.Read);//用文件流來處理


// Total bytes to read:
dataToRead = iStream.Length;

Response.ContentType = "application/octet-stream";//問題就在這裏,解決百M關口
Response.AddHeader("Content-Disposition", "p_w_upload; filename=" + filename);

// Read the bytes.
  while (dataToRead > 0)
{
// Verify that the client is connected.
if (Response.IsClientConnected)
{
// Read the data in buffer.
length = iStream.Read(buffer, 0, 10000);

// Write the data to the current output stream.
Response.OutputStream.Write(buffer, 0, length);

// Flush the data to the HTML output.
Response.Flush();

buffer= new Byte[10000];
dataToRead = dataToRead - length;
}
else
{
//prevent infinite loop if user disconnects
dataToRead = -1;
}
}
}
catch (Exception ex)
{
// Trap the error, if any.
Response.Write("Error : " + ex.Message);
}
finally
{
if (iStream != null)
{
//Close the file.
iStream.Close();
}
}
 
參考:PRB:Response.WriteFile 無法下載大文件
[url]http://support.microsoft.com/default.aspx?scid=kb;zh-cn;812406#2[/url]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章