当前位置: 首页 > 知识库问答 >
问题:

使用Jersey和RestyGWT下载文件

咸浩初
2023-03-14

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

用RestyGWT和Jersey 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或通过窗口下载文件呢。open()?

我想使用POST not GET,这样我可以传递一个可序列化对象的列表,例如:列表文件。

我尝试在客户端使用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中下载文件的例子

共有1个答案

季博
2023-03-14

通常(*)不能使用ajax下载文件,因此必须使用窗口。open()或iframe,要求用户将文件另存为。

看看我在这个查询中的回答:在GWT中的Window.open在回调函数中无法正确打开

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

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

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

 类似资料:
  • 客户端只有一个字节数组。另一个服务器向我发送JSON 我正在寻找在浏览器中保存byte[]的方法 将它们发送到服务器,或者我可以从客户端下载。 我根本找不到任何解决办法。 所以我的问题是“有可能用restygwt byte[]保存一个怎么保存的?”

  • 问题内容: 我正在尝试使用asyncTask下载文件,但无法正常工作,没有错误消息或什么都没有,只是不下载文件…我尝试了所有操作,但似乎并没有输入…任何人都知道可以是问题吗?我在手机上测试过,网址也可以。 问题答案: 我只运行了您的代码,它对我来说很好用。该图像已下载到sdcard。 请注意,请确保在AndroidManifest.xml中设置了以下权限: 这是我得到的日志(请注意,我添加了):

  • 问题内容: 我编写了一些代码来下载我所做的网络广播的一集。它获取剧集的URL,并获取保存它的位置。但是,它最多只能下载16MB,然后自动取消。我不完全确定要增加此值需要更改什么值。是否可以,有人可以指出正确的方向吗?谢谢! 下载代码: 问题答案: 快速查看transferFrom的文档: 好。 计数的值1 << 24(来自原始问题)等于16M 我想这就是您的问题的答案:-)

  • 问题内容: 我需要提供下载文件的链接,任何用户都必须隐藏该链接并且可以访问该链接,这是我的代码,没有任何错误,但是我什至无法打开下载对话框: 模板 脚本文件 问题答案: 首先,您不能“隐藏/不公开”基于Web的技术(HTML / CSS / JavaScript)应用程序中的链接。下载是由客户端处理的,因此Download / Link-URL必须是公共的。您可以尝试使用后端执行的编程语言(例如“

  • 我想做的是用httpclient下载一个文件。目前我的代码如下。 我的下载URL如下所示:http://example.com/file/afz938f348dfa3 正如你可以看到没有扩展名的文件(至少在网址)然而,当我去一个正常的浏览器网址,它下载文件asdasdaasda.txt或asdasdasdsd.pdf(名称是不同的url和extenstion并不总是相同的,取决于我试图下载什么)。

  • 我有一个CSV文件的URL,我可以在浏览器中下载并打开该文件,而不会出现问题。 我正在尝试使用电源外壳下载此文件,但没有成功。我尝试使用,和使用web命令对象,但没有运气。