这类似于:How to open a file using JavaScript?
function getFile(filename){
// setting mime this way is for example only
var mime = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
jQuery.ajax({ url : 'get_file.pl',
data : {filename:filename},
success : function(data){
var win = window.open('','title');
win.document.open(mime);
win.document.write(data);
win.document.close();
}
});
}
jQuery('#imgID').dblclick(function(){
getFile('someFile.docx');
});
我正在做这件事,但我认为上述内容适用于文本文件,但不适用于二进制文件。是否有适当的插件?理想的是在浏览器(或应用程序)中打开文件,而不是下载,但我怀疑这是一个梦想。如果必须使用保存/打开对话框下载文件,那没关系。
我忘记提及的一条信息是我希望这是一个POST请求。这就是我开始研究AJAX的部分原因。我已经看到了创建表单/ iframe来做类似事情的变通办法,但我一直在寻找一个更好的返回信息处理程序。
答案 0 :(得分:5)
对我来说,没有理由通过AJAX这样做。只需打开 get_file.pl?filename = ... 的新窗口,让浏览器处理它。如果用户有一个能够处理 get_file.pl 发送的Content-Type
的插件,则会显示该文件;否则,它应该像任何其他文件一样下载。
function getFile(filename) {
window.open('get_file.pl?filename=' + filename,'title');
}
jQuery('#imgID').dblclick(function() {
getFile('someFile.docx');
});
修改:如果您希望POST
加入您的脚本,you can do it加上一些<form>
hackery:
function getFile(filename) {
var win = 'w' + Math.floor(Math.random() * 10000000000000);
window.open('', win,'width=250,height=100');
var f = $('<form></form>')
.attr({target: win, method:'post', action: 'get_file.pl'})
.appendTo(document.body);
var i = $('<input>')
.attr({type:'hidden',name:'filename',value:filename})
.appendTo(f);
f[0].submit();
f.remove();
}
当然,这有些愚蠢,因为用开发者工具隐藏你的数据不会“窥探”。如果您的文件名确实是敏感的,请向客户端发出访问令牌,并在服务器脚本中查找数据。