使用Jersey和RestyGWT下载文件

做瑜伽

嗨,有可能通过传递列表作为参数从服务器下载文件

使用RestyGWTJersey 1.7吗?

在服务器端,我有以下Web服务

@POST
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("/download")
public Response downloadFiles(@Context HttpServletResponse response, List<FileInfo> files) {
    ZipFile zip = null;

    String uuid = UUID.randomUUID().toString();
    response.setHeader("Content-Disposition", "attachment; filename="
            + uuid + ".zip");
    try {
        zip = new ZipFile(response.getOutputStream());
        File f = new File(ConfigurationLoader.getRealPath("/logo.png"));
        zip.addFile(f, "");
        zip.getOutputStream().flush();
        zip.getOutputStream().close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

当我在浏览器中键入localhost:8080 / Url / download时,它可以工作,但是如何使用Resty Gwt或通过Window.open()下载文件?

我想使用POST而不是GET,因此我可以传递可序列化对象的列表,例如:List files

我在RestyGWT的客户端上尝试过:

@POST
@Produces("application/zip")
@Path("/download")
public void downloadFiles(List<FileInfo> files, MethodCallback<Response> response);

private static final Resource resource = new Resource(
                GWT.getHostPageBaseURL() + "rest/files");

        public static final FileRestService get() {
            if (instance == null) {
                instance = GWT.create(FileRestService.class);
                ((RestServiceProxy) instance).setResource(resource);
            }
            return instance;
        }

但它不起作用,我找不到在restygwt中下载文件的示例

马诺洛·卡拉斯科·莫尼诺(Manolo CarrascoMoñino)

通常(*),您不能使用Ajax下载文件,因此必须使用aWindow.open()或aniframe来要求用户将文件另存为。

看一下我在此查询中的响应:GWT中的Window.open在回调函数中无法正确打开

当然,使用iframe不能使用POST,但是您可以编写循环以在每次加载最后一个iframe时请求一个不同的文件。将询问用户与要下载的文件一样多的次数。

您可以使用FormPanel尽管,然后添加一些隐藏的参数并将其发布到服务器。FormPanel在隐藏的iframe中显示响应,因此设置适当的标题(内容类型content-disposition)可以下载文件并要求用户另存为。我会压缩文件集,以便用户可以保存或打开内容,因为更多的操作系统都有实用程序来可视化压缩文件。

(*)使用XHR可以下载文件,但是您需要一种处理内容并将其显示给用户的方法。通常用于文本文件html,txt,xml等。请看一下html5 api来接收和处理二进制数据。但是,您不能在用户的文件系统中创建文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Ajax和iframe下载文件

来自分类Dev

使用Flask上传和下载文件

来自分类Dev

使用certutil和Python下载文件

来自分类Dev

使用雾上传和下载文件

来自分类Dev

使用node.js,流和promise下载文件

来自分类Dev

使用urllib2和/或wget自动下载文件

来自分类Dev

使用暂停和恢复按钮下载文件?

来自分类Dev

使用AFHTTPSessionManager和身份验证下载文件

来自分类Dev

如何使用Python,Selenium和PhantomJS下载文件

来自分类Dev

使用Guzzle和Ajax从Dropbox下载文件

来自分类Dev

使用Retrofit 2.0和DownloaManager下载文件

来自分类Dev

使用Vue.js和Python Flask下载文件

来自分类Dev

如何使用laravel和vuejs下载文件

来自分类Dev

使用perl和Firefox :: Marionette下载文件

来自分类Dev

使用Flask和JS从服务器下载文件

来自分类Dev

使用python beautifulsoup和selenium下载文件

来自分类Dev

如何使用node.js和http下载文件?

来自分类Dev

使用<iframe>和AJAX下载文件时出现404

来自分类Dev

使用Watir Webdriver和phantomjs下载文件

来自分类Dev

使用Retrofit 2.0和Spring Server下载文件

来自分类Dev

无法使用FileTransfer在Cordova和Ionic中下载文件

来自分类Dev

使用swift和objective-c下载文件

来自分类Dev

使用 JSF 和 Primefaces 下载文件时出错

来自分类Dev

如何使用 urlsession 和 requestbody 下载文件

来自分类Dev

使用cherrypy下载文件

来自分类Dev

使用AsyncTask下载文件

来自分类Dev

使用Django下载文件

来自分类Dev

使用webapi下载文件

来自分类Dev

使用ClosedXML下载文件