2009-07-28 33 views
0

我正在使用写入文件Response.WriteFile(path);Server.WriteFile在浏览器中打开文件,而不是显示另存为对话框

我的问题是,它总是显示另存为对话框,我想要的是,如果文件类型是JPG,PDF或任何浏览器兼容的文件,它应该在浏览器中打开它;保存对话框应该只打开其他浏览器不兼容的文件

+0

什么服务器端环境? – 2009-07-28 03:11:19

+0

那么,你面临的问题是什么? – shahkalpesh 2009-07-28 03:12:30

+0

@ Daniel A. White - 看看这些标签。 @ shahkalpesh - 我正在编辑我的问题 – Shimmy 2009-07-28 03:15:44

回答

2

您可以用Content-Disposition标头在很大程度上控制此行为。

为了强制浏览器显示 另存为对话框中单击 超链接时,你必须包括 以下在 文件HTTP响应头被下载:

内容处置:附件; 名= <文件name.ext >

哪里是 要出现在另存为文件名对话框 (如finances.xls或mortgage.pdf) - 没有<和>符号。

1

你在那里描述的应该是默认行为。浏览器将根据MIME /内容类型决定它可以和不能呈现的内容。在您的ASP.NET代码中,将Response.ContentType设置为适当的MIME类型,并使用Response的输出流将文件内容发送回浏览器。

对IE的可用MIME类型进行了讨论here

1

图像您的代码应该是这个样子.......

Response.ContentType = dtbl[0].FileExt; 
Response.BinaryWrite(dtbl[0].ResData); 

文档代码应该是这个样子....

Byte[] bytes = (Byte[])dtbl.Rows[0]["ResData"]; 
Response.Buffer = true; 
Response.Charset = ""; 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.ContentType = dtbl.Rows[0]["FileExt"].ToString(); 
Response.AddHeader("content-disposition", "attachment;FileName=" + dtbl.Rows[0]["DocName"].ToString()); 
Response.BinaryWrite(bytes); 
Response.Flush(); 
Response.End(); 
相关问题