见下面的情景:
是否可以在不从服务器下载文件的情况下从javascript(从国外网页执行)保存数据?
非常感谢任何帮助!
答案 0 :(得分:5)
为了在客户端保存数据,没有任何服务器交互,我见过的最好的是Downloadify,是一个小的JavaScript + Flash库,允许您直接生成和保存文件。浏览器......
选中demo。
答案 1 :(得分:5)
当我想在不使用服务器的情况下启动下载时,我遇到了这种情况。我写了这个jQuery插件,它在Blob中包含了textarea / div的内容,然后启动了Blob的下载。允许您指定文件名和类型..
jQuery.fn.downld = function (ops) {
this.each(function () {
var _ops = ops || {},
file_name = _ops.name || "downld_file",
file_type = _ops.type || "txt",
file_content = $(this).val() || $(this).html();
var _file = new Blob([file_content],{type:'application/octet-stream'});
window.URL = window.URL || window.webkitURL;
var a = document.createElement('a');
a.href = window.URL.createObjectURL(_file);
a.download = file_name+"."+file_type;
document.body.appendChild(a);
a.click(); $('a').last().remove();
});
}
默认使用:$(“#element”)。downld();
选项:$(“#element”)。downld({name:“some_file_name”,type:“html”});
Codepen示例http://codepen.io/anon/pen/cAqzE
答案 2 :(得分:3)
JavaScript在sandboxed环境中运行,这意味着它只能访问特定的浏览器资源。具体来说,它无权访问文件系统或来自其他域(网页,javascript等)的动态资源。好吧,还有其他的东西(I / O,设备),但你明白了。
您需要将数据发布到可以调用文件下载的服务器,或者使用其他技术,如flash,java applet或silverlight。 (我不确定在过去2中对此的支持,我也不建议使用它们,取决于它的用途......)
答案 3 :(得分:1)
通过javascript下载本地/客户端内容的解决方案并不简单。我使用smartclient-html-jsp实现了一个解决方案。
以下是解决方案:
//代码开始
<%@ page import="java.util.*,java.io.*,java.util.Enumeration"%>
<%
response.setContentType ("text/csv");
//set the header and also the Name by which user will be prompted to save
response.setHeader ("Content-Disposition", "attachment;filename=\"data.csv\"");
String contents = request.getParameter ("text");
if (!(contents!= null && contents!=""))
contents = "No data";
else
contents = contents.replaceAll ("NEW_LINE", "\n");
//Open an input stream to the file and post the file contents thru the
//servlet output stream to the client m/c
InputStream in = new ByteArrayInputStream(contents.getBytes ());
ServletOutputStream outs = response.getOutputStream();
int bit = 256;
int i = 0;
try {
while ((bit) >= 0) {
bit = in.read();
outs.write(bit);
}
//System.out.println("" +bit);
} catch (IOException ioe) {
ioe.printStackTrace(System.out);
}
outs.flush();
outs.close();
in.close();
%>
<HTML>
<HEAD>
</HEAD>
<BODY>
<script type="text/javascript">
try {window.close ();} catch (e) {alert (e);}
</script>
</BODY>
</HTML>
//代码结束
此代码在生产环境中经过测试和部署/工作,这也是跨浏览器功能。
由于 SHAILENDRA
答案 4 :(得分:0)
您可以在Cookie中保存少量数据。