如何把我的html文件让用户点击按钮直接下载?

时间:2022-05-23 15:18:01
系统中需要这样实现,点击某按钮,自动生成一个html文件(这部分没问题),然后直接发送到浏览器,出现下载的对话框,而不是显示html文件的内容。

做来做去,都是直接显示了html文件的内容,没法让用户下载,烦啊:(

搜也搜不到,麻烦哪位大侠指导一下,谢谢啊

6 个解决方案

#1


把页面做好压缩了,让他下载 如何把我的html文件让用户点击按钮直接下载?

#2


怎样点击直接下载 
直接让客户端浏览器下载已知类型的文件 
实现点击链接直接下载文件 
点击后直接下载而不是将其打开 
写下载链接的时候,对于txt,doc,xls等文本类型的文件,点击链接时怎样才能直接下载,而不打开呢  
如何左键点击连接连接直接下载.txt文件 
  
  
网上搜到提供的方法都是用fso stream读取文件,然后通过修改http headers的办法,比较麻烦,而且效率很低。 
  
  
IIS里边有一项Custom HTTP Headers 的选项,可以直接在里边修改Content-disposition为 attachment即可。 
  
  
例子:http://www.mianbi.com/book/a2165bec-a644-4ad3-b2ca-77a8662ff3f6.txt 
  
  
Microsoft provides a way to override this "stream now" behavior at the server side using a custom HTTP Header in IIS. To add the custom header, launch Internet Information Services Manager and expand your Web sites to reveal the folder where multimedia content is stored. Right-click this folder and choose Properties. Click the HTTP Headers tab, followed by the Add button. 
  
  
For the Custom header name type: Content-disposition 
For the Custom header value type: attachment 
  
  
Click OK, click Apply, click OK. 
  
Visit one of the Web pages linking to your content download and test the links. You should be presented with the Save As dialog. 
  
There is a catch to this solution. By setting the Content-disposition for the entire folder, your server will pop the Save As dialog box for any file called by a Web browser, including Web pages. There are two ways to solve this problem: only store media files in the folder where you modify the Content-disposition or set the attribute on-the-fly using code. 
  
原文来自:http://www.jakeludington.com/windows_media_server_admin/20041209_using_custom_http_headers_to_prompt_for_video_file_downloads.html

#3


用response流write一个html文件
ContentType类型为application/octet-stream

#4


引用 1 楼 wx8849 的回复:
把页面做好压缩了,让他下载


我想的啊,如果找不到办法,那是最后的一招。

#5


html压缩下载

Response.AddHeader("Content-disposition", "attachment; filename=" + sGenName);
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(btFile);
Response.End();

FileInfo info = new FileInfo(filePath);   
            long fileSize = info.Length;   
            Response.Clear();   
            Response.ContentType = "application/octet-stream";   
            Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName);   
            Response.AddHeader("Content-Length", fileSize.ToString());   
            Response.WriteFile(filePath, 0, fileSize);   
            Response.Flush();   
            Response.Close();  

#6


            FileInfo Fi = new FileInfo(filePath);
            if (Fi.Exists)
            {
                FileStream fs = new FileStream(filePath, FileMode.Open);
                byte[] bytes = new byte[(int)fs.Length];
                fs.Read(bytes, 0, bytes.Length);
                fs.Close();
                Response.ContentType = "application/octet-stream";//通知浏览器下载文件而不是打开
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("1.html", System.Text.Encoding.UTF8));
                Response.BinaryWrite(bytes);
                Response.Flush();
                Response.End();
            }

#1


把页面做好压缩了,让他下载 如何把我的html文件让用户点击按钮直接下载?

#2


怎样点击直接下载 
直接让客户端浏览器下载已知类型的文件 
实现点击链接直接下载文件 
点击后直接下载而不是将其打开 
写下载链接的时候,对于txt,doc,xls等文本类型的文件,点击链接时怎样才能直接下载,而不打开呢  
如何左键点击连接连接直接下载.txt文件 
  
  
网上搜到提供的方法都是用fso stream读取文件,然后通过修改http headers的办法,比较麻烦,而且效率很低。 
  
  
IIS里边有一项Custom HTTP Headers 的选项,可以直接在里边修改Content-disposition为 attachment即可。 
  
  
例子:http://www.mianbi.com/book/a2165bec-a644-4ad3-b2ca-77a8662ff3f6.txt 
  
  
Microsoft provides a way to override this "stream now" behavior at the server side using a custom HTTP Header in IIS. To add the custom header, launch Internet Information Services Manager and expand your Web sites to reveal the folder where multimedia content is stored. Right-click this folder and choose Properties. Click the HTTP Headers tab, followed by the Add button. 
  
  
For the Custom header name type: Content-disposition 
For the Custom header value type: attachment 
  
  
Click OK, click Apply, click OK. 
  
Visit one of the Web pages linking to your content download and test the links. You should be presented with the Save As dialog. 
  
There is a catch to this solution. By setting the Content-disposition for the entire folder, your server will pop the Save As dialog box for any file called by a Web browser, including Web pages. There are two ways to solve this problem: only store media files in the folder where you modify the Content-disposition or set the attribute on-the-fly using code. 
  
原文来自:http://www.jakeludington.com/windows_media_server_admin/20041209_using_custom_http_headers_to_prompt_for_video_file_downloads.html

#3


用response流write一个html文件
ContentType类型为application/octet-stream

#4


引用 1 楼 wx8849 的回复:
把页面做好压缩了,让他下载


我想的啊,如果找不到办法,那是最后的一招。

#5


html压缩下载

Response.AddHeader("Content-disposition", "attachment; filename=" + sGenName);
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(btFile);
Response.End();

FileInfo info = new FileInfo(filePath);   
            long fileSize = info.Length;   
            Response.Clear();   
            Response.ContentType = "application/octet-stream";   
            Response.AddHeader("Content-Disposition", "attachement;filename=" + fileName);   
            Response.AddHeader("Content-Length", fileSize.ToString());   
            Response.WriteFile(filePath, 0, fileSize);   
            Response.Flush();   
            Response.Close();  

#6


            FileInfo Fi = new FileInfo(filePath);
            if (Fi.Exists)
            {
                FileStream fs = new FileStream(filePath, FileMode.Open);
                byte[] bytes = new byte[(int)fs.Length];
                fs.Read(bytes, 0, bytes.Length);
                fs.Close();
                Response.ContentType = "application/octet-stream";//通知浏览器下载文件而不是打开
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("1.html", System.Text.Encoding.UTF8));
                Response.BinaryWrite(bytes);
                Response.Flush();
                Response.End();
            }