从服务器下载文件到本地,即前端向后端请求文件路径,然后打开该路径。
个人感觉这个方法不是很安全,但目前没找到可以完全实现的其他方法。
具体实现方法为:
html部分
<button id="backup">下载</button>
javascript部分
这部分引入了一个layer.js文件,它是一个web弹层组件,在这里使用它的等待动画
$("#backup").unbind("click").bind("click", function () {
Backup();
});
function Backup() {
var loading = layer.load(1);
var jsontext = encodeURI('{"functionname":"backup"}');
var URL = WebServiceAddress + jsontext; //WebServiceAddress为你的C#路径
//创建同步对象
var theWorker = new Worker("Jscript/worker.js");
theWorker.postMessage(URL); //由于js是单线程,此处需要等待和数据传输同时进行,因而需要开辟一个新线程
theWorker.onmessage = function (p1) {
var res=p1.data; //返回文件路径
if (res !== "failed") {
$("<a>",{
id:'backupa',
href: res,
text: "123",
style: "display: none;"
}).appendTo("#adminmessage_id");
layer.close(loading);
document.getElementById("backupa").click();
}
else {
alert("失败!");
layer.close(loading);
}
};
}
//这是一个单独的js文件,即上面引用的worker.js
onmessage=function(evt){
var URL = evt.data;
var xmlhttp = new createXMLHTTP();
xmlhttp.open("POST", URL, false);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
var res=xmlhttp.responseText;
postMessage(res);
}
}
xmlhttp.send(null);
};
function createXMLHTTP() {
return new XMLHttpRequest();
}
C#部分
[WebMethod]
public void backuprecovery()
{
BackupRecovery br = new BackupRecovery();
br.Backup();
}
using System.Web.Mvc; //注意引用Mvc
public class BackupRecovery : Controller
{
public string Backup()
{
//根据需求获得路径,注意这个路径是服务器IP+端口+其他
//这个文件一定是发布好的,没有发布获取不了
return 路径;
}
}