[讨论]Response.ContentType 控制输出文件类型(讨论下载文件问题)


所属类别:.NET

文章作者:未知

特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!


Response.ContentType :控制输出的文件类型 服务器送给客户端的数据包类型可以是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"<%dimramstrramstr=""setrs=server.createobject("adodb.recordset")sql="XXXXXXXXXXX"rs.opensql,conn,1,3'conn已定义dowhilenotrs.eoframstr=ramstr&rs("url")&vbCrLfrs.movenextlooprs.closeresponse.ContentType="audio/x-pn-realaudio"'response.ContentType="audio/x-mpegurl"response.writeramstr%>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);}以上代码也适合用于小于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关闭本页

相关信息

· Debian Linux下配置heartbeat高可用集群

· 初学VC+数据库的总结

· aspx页面javascript的几个trick

· 在小型局域网中用W2k共享上网








....

42913 94501