2009-07-07 70 views
2

我是网络开发新手,所以如果这个问题没有问题,我很抱歉。我希望在服务器的硬盘上向用户提供一个文件(如发送HTTP附件以触发浏览器的“另存为...”对话框)。用户点击页面上的按钮,服务器根据他/她的某些帐户设置(和其他参数)生成定制的数据文件,然后弹出“另存为...”对话框。我应该如何去实现这个在Javascript中?使用Javascript向用户发送HTTP附件(打开浏览器的另存为...对话框)

编辑:供大家参考,服务器Glassfish和Apache的

回答

2

简,

另存为对话框o很少出现在页面加载。您需要将您的用户直接重定向到您希望他们保存的文件,或重定向到提供文件的服务器端页面。

一旦你知道文件的地址,这样做

window.location = http://yourserver.com/generatedfiles/file_2342342.txt 

或者,做这样的事情:

window.location = http://yourserver.com/getgeneratedfile.aspx?fileID=2342342 

...这将用户重定向到该因子的页面生成的文件。然后您需要在该页面的标题中指定内容处置和文件名,如甘道夫的回复中所述。

编辑:啊,你使用的是Apache。那么可能不会有那里的ASPX文件。

1

设置HTTP响应头:

Content-Disposition: attachment; filename=myfile.txt 

或者像这样

<a href="javascript:void(0);" onclick="document.execCommand('SaveAs',true,'file.html');">Save this page</a> 
1

@ aric的回答是正确的;但是,window.location将导致加载/卸载事件被触发,这可能不适合您的应用程序。在这种情况下,您可能会将隐藏的iframe指向该url,以使保存对话框显示而不会丢失页面的状态。

另外,'SaveAs'可能是document.execCommand的IE特定值,因为它doesn't exist in Firefox