我正在制作一个快速应用程序,当用户单击“下载”时无法导出文件。
我的方法是向服务器发出带有内容的 ajax 请求,然后在服务器上创建文件并发回文件路径。从那里,我使用文件路径调整元素的src
属性。iframe
但是,Chrome(或任何浏览器,实际上)什么都没有发生。如果我查看检查器的网络选项卡,它显示它收到了文件 OK(带有 200 响应代码),并且内容在那里。此外,iframe
具有正确的src
. 我想弹出一个下载对话框,但似乎无法得到它。
有任何想法吗?谢谢!
示例代码:
app.js(服务器)
app.post('/create-html', function(req, res) {
// explicitly set the headers on the server
res.header('Content-Type', 'application/octet-stream');
res.header('Content-Disposition', 'attachment; filename="test.html"')
var html = req.body.content
, name = "test.html"
, filepath = (__dirname + "/public/files/" + name)
, json_resp = {
data: ''
, err: false
};
fs.writeFile( filepath, html, 'utf8', function(err, data) {
// write the file and res.send the json_resp, so we can
// access the filename on the client
})
})
script.js(客户端)
$("#export-html").click( function(e) {
e.preventDefault();
var html = $("#html-wrapper").html(); // the html of the file we want to make
$.ajax({
method: "POST"
, url: "/create-html"
, headers: {
"Content-Disposition": 'attachment; filename="test.html"'
}
, type: "JSON"
, success: function(resp) {
var iframe = document.getElementById("iframe")
, fp_prefix = "/files/"
, fp = fp_prefix + resp.data; // ex: "/files/test.html" - the path where the file can be accessed
iframe.src = fp
}
})
})
我200
在 POST 到服务器 ( /create-html
) 和服务器发回数据时( ) 得到 s test.html
。文件的内容test.html
显示在 Web 检查器中,并/files/test.html
显示页面。但是,我无法下载 HTML。
有任何想法吗?