使用js打开文件另存为框:
有如下三种思路:
1.在客户端模拟一个a标签,然后打开
2.执行saveas命令
3.使用form标签,
思路一代码:
客户端代码:
function fake_click(obj) {
if (document.createEventObject) {
var ev = document.createEventObject();
// IE浏览器支持fireEvent方法
obj.fireEvent(ev)
}
else {
var ev = document.createEvent("MouseEvents");
ev.initMouseEvent(
"click", true, false, window, 0, 0, 0, 0, 0
, false, false, false, false, 0, null
);
ev.stopPropagation();
// 其他标准浏览器使用dispatchEvent方法
obj.dispatchEvent(ev);
}
}
function export_raw(name, data) {
//var urlObject = window.URL || window.webkitURL || window;
//var export_blob = new Blob([data]);
//var save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
var save_link = document.createElement("a");
save_link.target = "_blank";
save_link.href = data;
save_link.download = name;
fake_click(save_link);
}
服务端代码:
Client c = new Client();
StreamReaderX stream = c.OpenStreamReader(filename);
if (stream == null)
{
Response.Write(string.Format("{0}文件在服务器上不存在。", filename));
Response.End();
return null;
}
Response.ContentType = string.Format("application/{0}", stream.FileInfo.hfsFileType);
Response.AppendHeader("Content-Length", stream.Size.ToString());
Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);
int size = 64 * 1024;
while (!stream.IsEnd && Response.IsClientConnected)
{
//stream.Read(pos,size);
byte[] o = (byte[])stream.ReadX(size);
Response.BinaryWrite(o);
Response.Flush();
}
Response.End();
return null;
这种方法在firefox/chrome/ie9以上,是没有问题的。但是在ie8中无法正常执行。
思路二代码:
客户端代码:
<script type="text/javascript">
function SaveAs5(imgURL) {
var oPop = window.open(imgURL, "", "width=1, height=1, top=5000, left=5000");
for (; oPop.document.readyState != "complete";) {
if (oPop.document.readyState == "complete") break;
}
oPop.document.execCommand("SaveAs");
oPop.close();
}
</script>
<img src="Content/0.jpg" id="DemoImg" border="0" onclick="SaveAs5(this.src)">
在chrome中,默认无法打开窗口
思路三代码:
客户端代码:
var form = document.createElement("form");
form.id = 'tempForm';
form.action = APPPATH + "/" + imgURL;
form.target = "_blank";
form.method = "post";
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
服务器端代码和上面类似
这个方法适合任何浏览器