IE中的“另存为”按钮,将文件保存在客户端

3
有没有办法在客户端上创建一个按钮,生成一个text/xml文件,将content-type设置为application-download,添加一个附件等等?我想要的是在我的页面上有一个“下载”按钮,可以保存一个xml文件。这是我在服务器端完成同样任务的方法:
response.StatusCode = 200;
        response.ContentEncoding = Encoding.UTF32;
        response.AddHeader("content-disposition", "attachment; filename=" + fileName);
        response.AddHeader("Content-Transfer-Encoding", "binary");
        response.AddHeader("Content-Length", response.ContentEncoding.GetByteCount(xmlString).ToString());
        response.ContentType = "application-download";
        response.Write(xmlString);    

我猜这是使用C#的ASP.NET? - Carlito
@JanHančič 是的,JavaScript/jQuery。 - Johan
@Carlito 是的,我的例子是用c#写的,但我想在客户端做同样的事情。 - Johan
你愿意使用Flash吗? - Pekka
@Pekka 只要不需要任何外部文件,是的。我想它需要一个单独的 .swf 文件。 - Johan
可能是重复的问题:在JavaScript中生成一些XML,提示用户保存 - Jacob
1个回答

0

如果你想在jQuery/Javascript中创建文件并能够从浏览器保存到磁盘,答案是明确的NO。出于安全原因,Javascript不允许保存到磁盘,也不能使浏览器为本地创建的内容弹出“另存为...”弹窗。

你有一个更简单的解决方案来回答你的问题。在你的例子中,你正在创建XML文件并将其作为附件从服务器发送,为什么不只需创建一个按钮来下载服务器创建的文件呢?

你不能通过纯粹的ajax来完成它,因为它无法在浏览器中触发下载,但你可以使用旧的“iframe下载技巧”在同一页中启动下载。

function download(url_to_your_creating_file_servlet){
iframe = document.createElement('iframe');  
iframe.style.visibility = 'hidden';
document.body.appendChild(iframe);
iframe.src = url_to_your_creating_file_servlet;
}

或者,如果您不介意打开另一个窗口/选项卡(有点丑),这也可以:

<a href="url_to_your_creating_file_servlet" target="blank"> Download </a>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接