javascript – 如何让浏览器提示用户保存服务器动态生成的文件?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何让浏览器提示用户保存服务器动态生成的文件?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1993字,纯文字阅读大概需要3分钟。
内容图文
客户端使用jquery ajax提交post请求,如下所示:
$.ajax({
url: "/xxx?request1",
data: theParams,
type: 'post',
error: function(XMLHttpRequest, textStatus, errorThrown){
// error handling
},
success: function(data){
var theResult = JSON.parse(data);
// success handling
}
});
Apache配置为使用/ xxx传递请求?到自定义应用程序.应用程序处理请求并返回信息.通常,此信息以JSoN形式返回,并使用jquery / javascript显示在“成功处理”部分中.在编写JSON之前,应用程序会编写以下标头(然后通过apache返回):
HTTP/1.0 200 OK
Connection: close
Server: MyServer v. 0.826
Content-Type: text/html
我也有饼干工作,在200 OK线之后放置以下内容:
Set-Cookie: cookie_name=value; Domain=example.com; Path=/; Expires=Fri, 21-Mar-2014 01:40:22 GMT; HttpOnly
在一种情况下,我希望用户能够保存返回的数据(作为纯文本文件).但这是我遇到问题的地方.
如果我使用JavaScript打开一个窗口并将数据写入新窗口,我发现Safari和Chrome都禁用了“另存为…”菜单选项(在Mac上).
(我有一个使用base64 URI工作的版本,但相对于网站的其他部分,它看起来没有抛光.)
然后我开始尝试包含内容处理:附件;文件名= file.txt的
标题,但我永远不会让浏览器产生提示.我尝试将此标题放在200 OK行之后,以及之后:
Content-Type: text/plain
Content-Disposition: attachment; filename=file.txt
除了不确定Content-Disposition标头的确切格式之外,我还不确定我是否正确使用Content-Type,或者ajax处理程序代码中是否存在阻止保存的内容.
我试图找到将所有东西放在一起的例子,但是只能找到零件而且我无法正确地将它放在一起.有什么建议?
我的目标只是现代浏览器,三个主要平台(Mac / Windows / Linux),客户端只有HTML5 / JavaScript.
解决方法:
Content-Disposition:附件是正确的标题,但浏览器只在直接加载文件时才服从它.
使用AJAX(甚至通过jQuery)将无法正常工作.
有一种方法可以做到这一点.
阅读this answer中的完整说明,但基本上你只需要在你的成功函数中写下:
window.location = "data:application/octet-stream," + encodeURIComponent(theResult);
编辑:
FileSaver.js提供了一个包装器improving browser compatibility,并为兼容的浏览器添加了对文件名的支持:
var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
saveAs(blob, "hello world.txt");
内容总结
以上是互联网集市为您收集整理的javascript – 如何让浏览器提示用户保存服务器动态生成的文件?全部内容,希望文章能够帮你解决javascript – 如何让浏览器提示用户保存服务器动态生成的文件?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。