一、Response.ContentType 類型簡(jiǎn)介一簡(jiǎn)單用法
服務(wù)器送給客戶端的數(shù)據(jù)包類型可以是text/html文本,也可以是gif/jpeg圖形文件,所以每次傳輸前,我們都必須告知客戶端將要傳輸?shù)奈募愋?,一般默認(rèn)情況下為“Text/Html”類型。
常用的類型包括:
<% Response.ContentType = "text/HTML" %>
<% Response.ContentType = "image/GIF" %>
<% Response.ContentType = "image/JPEG" %>
<% Response.ContentType = "text/plain" %>
<% Response.ContentType = "image/JPEG" %>
<% Response.ContentType = "application/x-cdf" %>
用于作為文本內(nèi)容返回而不是已解釋的 HTML 語句:Response.ContentType = "text/plain"
<% Response.ContentType = "text/plain"
Response.write(now()&"會(huì)被執(zhí)行么?")
%>
你可以注意到:頁(yè)面提供下載,頁(yè)面中的ASP內(nèi)容被解釋執(zhí)行了的
程序文件以XLS文件被提供下載 Response.ContentType = "application/vnd.ms-excel"
<% Response.ContentType = "application/vnd.ms-excel"
Response.write("本頁(yè)面調(diào)試會(huì)出現(xiàn)下載對(duì)話框提供下載,保存類型為XLS")
%>
實(shí)現(xiàn)歌曲連續(xù)播放 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 輸出的時(shí)候,由于定義了response.ContentType 所以輸出歌曲地址的時(shí)候會(huì)自動(dòng)調(diào)用符合相應(yīng)格式的軟件來播放歌曲,不過前提是播放歌曲的軟件必須先安裝的。
二、Response.ContentType 的所有類型:
$mimetypes = array(
‘ez‘ => ‘a(chǎn)pplication/andrew-inset‘,
‘hqx‘ => ‘a(chǎn)pplication/mac-binhex40‘,
‘cpt‘ => ‘a(chǎn)pplication/mac-compactpro‘,
‘doc‘ => ‘a(chǎn)pplication/msword‘,
‘bin‘ => ‘a(chǎn)pplication/octet-stream‘,
‘dms‘ => ‘a(chǎn)pplication/octet-stream‘,
‘lha‘ => ‘a(chǎn)pplication/octet-stream‘,
‘lzh‘ => ‘a(chǎn)pplication/octet-stream‘,
‘exe‘ => ‘a(chǎn)pplication/octet-stream‘,
‘class‘ => ‘a(chǎn)pplication/octet-stream‘,
‘so‘ => ‘a(chǎn)pplication/octet-stream‘,
‘dll‘ => ‘a(chǎn)pplication/octet-stream‘,
‘oda‘ => ‘a(chǎn)pplication/oda‘,
‘pdf‘ => ‘a(chǎn)pplication/pdf‘,
‘a(chǎn)i‘ => ‘a(chǎn)pplication/postscript‘,
‘eps‘ => ‘a(chǎn)pplication/postscript‘,
‘ps‘ => ‘a(chǎn)pplication/postscript‘,
‘smi‘ => ‘a(chǎn)pplication/smil‘,
‘smil‘ => ‘a(chǎn)pplication/smil‘,
‘mif‘ => ‘a(chǎn)pplication/vnd.mif‘,
‘xls‘ => ‘a(chǎn)pplication/vnd.ms-excel‘,
‘ppt‘ => ‘a(chǎn)pplication/vnd.ms-powerpoint‘,
‘wbxml‘ => ‘a(chǎn)pplication/vnd.wap.wbxml‘,
‘wmlc‘ => ‘a(chǎn)pplication/vnd.wap.wmlc‘,
‘wmlsc‘ => ‘a(chǎn)pplication/vnd.wap.wmlscriptc‘,
‘bcpio‘ => ‘a(chǎn)pplication/x-bcpio‘,
‘vcd‘ => ‘a(chǎn)pplication/x-cdlink‘,
‘pgn‘ => ‘a(chǎn)pplication/x-chess-pgn‘,
‘cpio‘ => ‘a(chǎn)pplication/x-cpio‘,
‘csh‘ => ‘a(chǎn)pplication/x-csh‘,
‘dcr‘ => ‘a(chǎn)pplication/x-director‘,
‘dir‘ => ‘a(chǎn)pplication/x-director‘,
‘dxr‘ => ‘a(chǎn)pplication/x-director‘,
‘dvi‘ => ‘a(chǎn)pplication/x-dvi‘,
‘spl‘ => ‘a(chǎn)pplication/x-futuresplash‘,
‘gtar‘ => ‘a(chǎn)pplication/x-gtar‘,
‘hdf‘ => ‘a(chǎn)pplication/x-hdf‘,
‘js‘ => ‘a(chǎn)pplication/x-javascript‘,
‘skp‘ => ‘a(chǎn)pplication/x-koan‘,
‘skd‘ => ‘a(chǎn)pplication/x-koan‘,
‘skt‘ => ‘a(chǎn)pplication/x-koan‘,
‘skm‘ => ‘a(chǎn)pplication/x-koan‘,
‘latex‘ => ‘a(chǎn)pplication/x-latex‘,
‘nc‘ => ‘a(chǎn)pplication/x-netcdf‘,
‘cdf‘ => ‘a(chǎn)pplication/x-netcdf‘,
‘sh‘ => ‘a(chǎn)pplication/x-sh‘,
‘shar‘ => ‘a(chǎn)pplication/x-shar‘,
‘swf‘ => ‘a(chǎn)pplication/x-shockwave-flash‘,
‘sit‘ => ‘a(chǎn)pplication/x-stuffit‘,
‘sv4cpio‘ => ‘a(chǎn)pplication/x-sv4cpio‘,
‘sv4crc‘ => ‘a(chǎn)pplication/x-sv4crc‘,
‘tar‘ => ‘a(chǎn)pplication/x-tar‘,
‘tcl‘ => ‘a(chǎn)pplication/x-tcl‘,
‘tex‘ => ‘a(chǎn)pplication/x-tex‘,
‘texinfo‘ => ‘a(chǎn)pplication/x-texinfo‘,
‘texi‘ => ‘a(chǎn)pplication/x-texinfo‘,
‘t‘ => ‘a(chǎn)pplication/x-troff‘,
‘tr‘ => ‘a(chǎn)pplication/x-troff‘,
‘roff‘ => ‘a(chǎn)pplication/x-troff‘,
‘man‘ => ‘a(chǎn)pplication/x-troff-man‘,
‘me‘ => ‘a(chǎn)pplication/x-troff-me‘,
‘ms‘ => ‘a(chǎn)pplication/x-troff-ms‘,
‘ustar‘ => ‘a(chǎn)pplication/x-ustar‘,
‘src‘ => ‘a(chǎn)pplication/x-wais-source‘,
‘xhtml‘ => ‘a(chǎn)pplication/xhtml+xml‘,
‘xht‘ => ‘a(chǎn)pplication/xhtml+xml‘,
‘zip‘ => ‘a(chǎn)pplication/zip‘,
‘a(chǎn)u‘ => ‘a(chǎn)udio/basic‘,
‘snd‘ => ‘a(chǎn)udio/basic‘,
‘mid‘ => ‘a(chǎn)udio/midi‘,
‘midi‘ => ‘a(chǎn)udio/midi‘,
‘kar‘ => ‘a(chǎn)udio/midi‘,
‘mpga‘ => ‘a(chǎn)udio/mpeg‘,
‘mp2‘ => ‘a(chǎn)udio/mpeg‘,
‘mp3‘ => ‘a(chǎn)udio/mpeg‘,
‘a(chǎn)if‘ => ‘a(chǎn)udio/x-aiff‘,
‘a(chǎn)iff‘ => ‘a(chǎn)udio/x-aiff‘,
‘a(chǎn)ifc‘ => ‘a(chǎn)udio/x-aiff‘,
‘m3u‘ => ‘a(chǎn)udio/x-mpegurl‘,
‘ram‘ => ‘a(chǎn)udio/x-pn-realaudio‘,
‘rm‘ => ‘a(chǎn)udio/x-pn-realaudio‘,
‘rpm‘ => ‘a(chǎn)udio/x-pn-realaudio-plugin‘,
‘ra‘ => ‘a(chǎn)udio/x-realaudio‘,
‘wav‘ => ‘a(chǎn)udio/x-wav‘,
‘pdb‘ => ‘chemical/x-pdb‘,
‘xyz‘ => ‘chemical/x-xyz‘,
‘bmp‘ => ‘image/bmp‘,
‘gif‘ => ‘image/gif‘,
‘ief‘ => ‘image/ief‘,
‘jpeg‘ => ‘image/jpeg‘,
‘jpg‘ => ‘image/jpeg‘,
‘jpe‘ => ‘image/jpeg‘,
‘png‘ => ‘image/png‘,
‘tiff‘ => ‘image/tiff‘,
‘tif‘ => ‘image/tiff‘,
‘djvu‘ => ‘image/vnd.djvu‘,
‘djv‘ => ‘image/vnd.djvu‘,
‘wbmp‘ => ‘image/vnd.wap.wbmp‘,
‘ras‘ => ‘image/x-cmu-raster‘,
‘pnm‘ => ‘image/x-portable-anymap‘,
‘pbm‘ => ‘image/x-portable-bitmap‘,
‘pgm‘ => ‘image/x-portable-graymap‘,
‘ppm‘ => ‘image/x-portable-pixmap‘,
‘rgb‘ => ‘image/x-rgb‘,
‘xbm‘ => ‘image/x-xbitmap‘,
‘xpm‘ => ‘image/x-xpixmap‘,
‘xwd‘ => ‘image/x-xwindowdump‘,
‘igs‘ => ‘model/iges‘,
‘iges‘ => ‘model/iges‘,
‘msh‘ => ‘model/mesh‘,
‘mesh‘ => ‘model/mesh‘,
‘silo‘ => ‘model/mesh‘,
‘wrl‘ => ‘model/vrml‘,
‘vrml‘ => ‘model/vrml‘,
‘css‘ => ‘text/css‘,
‘html‘ => ‘text/html‘,
‘htm‘ => ‘text/html‘,
‘a(chǎn)sc‘ => ‘text/plain‘,
‘txt‘ => ‘text/plain‘,
‘rtx‘ => ‘text/richtext‘,
‘rtf‘ => ‘text/rtf‘,
‘sgml‘ => ‘text/sgml‘,
‘sgm‘ => ‘text/sgml‘,
‘tsv‘ => ‘text/tab-separated-values‘,
‘wml‘ => ‘text/vnd.wap.wml‘,
‘wmls‘ => ‘text/vnd.wap.wmlscript‘,
‘etx‘ => ‘text/x-setext‘,
‘xsl‘ => ‘text/xml‘,
‘xml‘ => ‘text/xml‘,
‘mpeg‘ => ‘video/mpeg‘,
‘mpg‘ => ‘video/mpeg‘,
‘mpe‘ => ‘video/mpeg‘,
‘qt‘ => ‘video/quicktime‘,
‘mov‘ => ‘video/quicktime‘,
‘mxu‘ => ‘video/vnd.mpegurl‘,
‘a(chǎn)vi‘ => ‘video/x-msvideo‘,
‘movie‘ => ‘video/x-sgi-movie‘,
‘ice‘ => ‘x-conference/x-cooltalk‘,
);
三、超過100M文件的下載
如何利用ContentType 來,在服務(wù)器上提供一個(gè).xls后綴的文件點(diǎn)擊下載而不是直接在瀏覽器中打開。(注意:于上程序文件以XLS文件被提供下載有所不同)
Response.ContentType = "application/x-download",讓整個(gè)程序文件點(diǎn)擊下載了。怎么辦好呢???
A:解決方案1. 利用Response.WriteFile的文件輸出操作
具體在按鈕點(diǎn)擊事件中添加一下代碼
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", "attachment; 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(fèi)關(guān)口
Response.AddHeader("Content-Disposition", "attachment; 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();
}
} 如何利用ContentType 來,在服務(wù)器上提供一個(gè).xls后綴的文件點(diǎn)擊下載而不是直接在瀏覽器中打開。(注意:于上程序文件以XLS文件被提供下載有所不同)
Response.ContentType = "application/x-download",讓整個(gè)程序文件點(diǎn)擊下載了。怎么辦好呢???
A:解決方案1. 利用Response.WriteFile的文件輸出操作
具體在按鈕點(diǎn)擊事件中添加一下代碼
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", "attachment; 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(fèi)關(guān)口
Response.AddHeader("Content-Disposition", "attachment; 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();
}
}
聯(lián)系客服