我有一个Web方法,可以创建一个文件并将其提供给浏览器。
在Chrome中,文本文件只需下载。
在IE9中,浏览器会询问我是否要打开或保存文件。
我想要做的是浏览器自动打开文件(在该文件类型的默认程序中)
代码:
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public void Test(string docNum, string docVersion)
{
var response = Context.Response;
response.ContentType = "application/octet-stream";
response.AppendHeader("Content-Disposition", "attachment; filename=" + docNum + ".txt");
Byte[] stream = System.Text.Encoding.ASCII.GetBytes("docNum + "," + docVersion);
response.OutputStream.Write(stream, 0, stream.Length);
response.Flush();
}
我通过以下方式宣布:
http://localhost:12345/Services/Foo.asmx/Test?docNum=123456789&docVersion=1
如何让浏览器只打开文件?
答案 0 :(得分:2)
可能与浏览器配置为打开的文件类型更相关。
如果浏览器不知道如何打开某些类型的文件,它将提示您下载
另一件事是你已经为TXT文件指定了octect-stream
Content-Type: application/octet-stream
Content-Disposition: attachment;filename=\"My Text File.txt\"
这实际上迫使浏览器下载这里提到的内容
<强> What content type to force download of text response? 强>
答案 1 :(得分:1)
如果您希望浏览器打开jpg或pdf或xls,则需要在&#34; ContentType&#34;中指定正确的mime类型。头。例如,现在您输出的所有内容为&#34; octet-stream&#34;,这是非常通用的。浏览器无法猜测哪个程序会打开这样的泛型类型。但是,如果它是xls,则可以使用&#34; application / vnd.ms-excel&#34;的ContentType。
这是一个SO答案,指出了用于查找可能的mime类型的大量资源:https://stackoverflow.com/a/7192429/283895
答案 2 :(得分:1)
如果客户端计算机知道如何打开文件扩展名,您实际上可以执行此操作。 我已经让它在 IE9
中工作了 假设您有一个文件扩展名.xyz
预录:客户端计算机应该已注册文件扩展名.xyz
,以打开您希望它打开的每个程序。如何到达:http://windows.microsoft.com/en-us/windows-vista/change-which-programs-windows-uses-by-default
第1步:在IIS中设置一个新的MIME类型,其属性为文件名扩展名= .xyz
,MIME类型=`application / xyz“如何到达此处:{{3 }}
第2步:在代码中将MIME类型设置为您刚创建的类型,并将Content-Disposition更改为“inline”:
response.ContentType = "application/xyz";
"Content-Disposition", "inline;
(.xyz
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public void Test(string docNum, string docVersion)
{
var response = Context.Response;
response.ContentType = "application/xyz";
response.AppendHeader("Content-Disposition", "inline; filename=" + docNum + ".xyz");
Byte[] stream = System.Text.Encoding.ASCII.GetBytes(docNum + "," + docVersion);
response.OutputStream.Write(stream, 0, stream.Length);
response.Flush();
}
这在IE9中对我有用。
我在Chrome中尝试了它并且它无法正常工作,它会自动下载该文件,但我没有使用Chrome中的任何设置。 如果有人有跨浏览器解决方案,我会感兴趣。