我正在尝试通过GET ajax调用动态请求下载文件。我有以下客户端代码:
$(function() {
$('#submit').click(function() {
$.ajax({
type: "GET",
url: "/download/" + "filename",
dataType: "json",
contentType: "application/json",
complete: function() {
console.log('Complete');
},
success: function() {
console.log('Success');
},
error: function() {
console.log('Error');
}
});
});
});
在节点服务器上我也有以下行(请注意,我不知道这是否是正确的方法)
app.get('/download/:filename', function(req, res) {
console.log(req.params);
res.write(fs.readFileSync(__dirname + "/../public/javascripts/main.js", 'utf8'));
});
所以我想实际下载那个javascript文件(最终是动态的)。我该如何正确地做到这一点?有些东西告诉我,我需要指定标题/内容类型。
答案 0 :(得分:5)
您应该将内容类型和处置设置为:
Content-Type: application/octet-stream
Content-Disposition: attachment;filename=\"main.js\"
我相信你必须重定向到这个文件。如果我没弄错的话,你不能通过AJAX调用强制下载文件。
答案 1 :(得分:1)
您是否打算将.js文件解释并应用于下载页面?
如果是这样的话,你可能最终会使用write()来编写页面,无论你如何获取它,这都不是最佳实践。
取而代之的是require.js。这是异步和动态加载脚本的更好方法,并在运行时应用它们。
使用手动解决方案下载动态.js文件时遇到的一个难点是依赖性。依赖于另一个的.js文件会导致blind js未定义错误。
另外,在将同步包含的文件转换为异步包含的文件时,可以获得运行时性能优化。
Require.js很好地解决了这些问题。
希望有所帮助。 祝一切顺利! 奇