<script language="JavaScript" src="../flashtop/ViewFileScript.js" type="text/javascript"> </script>
服务器送给客户端的数据包类型可以是text/html文本,也可以是gif/jpeg图形文件,所以每次传输前,我们都必须告知客户端将要传输的文件类型,一般默认情况下为“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" %> 用于作为文本内容返回而不是已解释的 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 所以输出歌曲地址的时候会自动调用符合相应格式的软件来播放歌曲,不过前提是播放歌曲的软件必须先安装的。 |
以上文章转贴自http://www.w269.com/infow269/1145w2691.htm 这里我想讨论一下,这么也东东。
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", "attachment; filename=" + filename); Response.Flush(); // Download the file. Response.WriteFile(filepath); Response.End();//没有这句,有时会出问题。会将该页面刷新后的内容追加写入filename文件中。 } 以上代码也适合用于小于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", "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(); } } 参考:PRB:Response.WriteFile 无法下载大文件 http://support.microsoft.com/default.aspx?scid=kb;zh-cn;812406#2
写text文件的代码如下: 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); Response.End();//没有这句,有时会出问题。会将该页面刷新后的内容追加写入filename文件中。 } 以上代码也适合用于小于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", "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(); } } 参考:PRB:Response.WriteFile 无法下载大文件 http://support.microsoft.com/default.aspx?scid=kb;zh-cn;812406#2
写text文件的代码如下:
private void Create_TextFile() { FileStream fs=new FileStream( Server.MapPath("note.txt"),FileMode.Create,FileAccess.Write); StreamWriter sw=new StreamWriter(fs,System.Text.Encoding.GetEncoding("shift_jis")); sw.Flush(); sw.BaseStream.Seek( 0,SeekOrigin.Begin ); DataTable dt=BindGrid().Tables["vP_Prt"]; foreach (DataRow row in dt.Rows) { foreach(DataColumn column in dt.Columns) sw.Write(row[column].ToString() + ","); sw.WriteLine(); } sw.Flush( ); sw.Close( ); } |
另外,如果没有设置好,.net是无法对服务器端的文件进行写操作的。 设置如下: 1,首先,该服务器端的文件要可写。至少某个角色要能写。 2,在IIS中的属性卡中的匿名登陆中,指定一个具有对那个文件进行写操作权限的角色,这样.net才能拥有相应的权限。 |