我最近一直在摆弄WebGL,并且让Collada读者工作了.问题是它很慢(Collada是一种非常冗长的格式),所以我将开始将文件转换为更易于使用的格式(可能是JSON).事实是,我已经有了用Javascript解析文件的代码,所以我也可以将它用作我的导出器!问题在于节省.
现在,我知道我可以解析文件,将结果发送到服务器,并让浏览器从服务器请求文件作为下载.但实际上服务器与这个特定的进程没有任何关系,为什么要让它参与其中呢?我已经在内存中拥有所需文件的内容.有什么方法可以使用纯javascript向用户提供下载吗?(我怀疑它,但不妨问......)
并且要明确:我没有在用户不知情的情况下尝试访问文件系统!用户将提供一个文件(可能通过拖放),脚本将转换内存中的文件,并提示用户下载结果.就浏览器而言,所有这些都应该是"安全"的活动.
[编辑]:我没有提及它,所以回答"Flash"的海报是有效的,但我正在做的部分是尝试强调纯HTML5可以做什么...所以Flash是在我的情况下.(虽然对于任何正在使用"真实"网络应用程序的人来说,这是一个非常有效的答案.)在这种情况下,除非我想要涉及服务器,否则看起来我运气不好.不管怎么说,还是要谢谢你!
我在客户端生成一个图像,我用这样的HTML显示它:
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgM...."/>
Run Code Online (Sandbox Code Playgroud)
我想提供下载生成的图像的可能性.
我如何才能意识到浏览器正在打开文件保存dialoge(或者只是将图像像chrome或firefox一样下载到下载文件夹中),这样用户可以保存图像而无需右键单击并另存为图像?
我更喜欢没有服务器交互的解决方案.所以我知道如果我首先上传Image然后开始下载就可以了.
非常感谢!
我是AJAX的新手.我正在使用AJAX向服务器发送请求.该服务返回一个文本文件.但是返回数据时不会出现下载框.返回文件的其余服务如下:
@Path("/examples")
public class ExampleCodesRest {
@POST
@Path("/getcode")
@Produces(MediaType.TEXT_PLAIN)
public Response getCodes(@Context ServletContext context){
String in=context.getRealPath("/WEB-INF/reports.jrxml");
File file=new File(in);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition",
"attachment; filename=\"file_from_server.log\"");
return response.build();
}
}
Run Code Online (Sandbox Code Playgroud)
我的AJAX调用如下:
$('a#link').click(function(event){
event.preventDefault();
$.ajax({
url: '/reports/rest/examples/getcode',
type: 'POST'
});
});
Run Code Online (Sandbox Code Playgroud)
没有AJAX,文件下载成功.使用AJAX,它不会下载文件.请咨询.
HTML5引入了FileWriter类.有了这个课程,你可以制作Blob.(文件是Blob的扩展.)使用JavaScript,您可以创建Blob,例如使用dataURL显示它.
例:
var bb = new BlobBuilder();
bb.append('some text')
var blob = bb.getBlob('text/plain');
var fr = new FileReader();
fr.onload = function(e) {
document.location = this.result; // voila the dataURL
}
fr.readAsDataURL(blob);
Run Code Online (Sandbox Code Playgroud)
但这还不够好:)我希望下载新创建的(文本)文件.不能在相同或单独的窗口中打开.
有办法吗?必须有.怎么样?
(此讨论已存在于Google Chrome组中)
更新
文件API已更改,因为规格已更改(或某些内容!?).Webkit打破了向后兼容性BlobBuilder,现在称之为WebKitBlobBuilder.同样的例子在jsFiddle上有所不同
更新
创建Blob现在再次以不同的方式工作(不再append()):
blob = new Blob(['some text'], {type: 'text/plain'});
Run Code Online (Sandbox Code Playgroud) html5 ×3
javascript ×3
ajax ×1
browser ×1
download ×1
filewriter ×1
html ×1
image ×1
jquery ×1
rest ×1