程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Spring REST-创建.zip文件并将其发送到客户端大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Spring REST-创建.zip文件并将其发送到客户端?

开发过程中遇到Spring REST-创建.zip文件并将其发送到客户端的问题如何解决?下面主要结合日常开发的经验,给出你关于Spring REST-创建.zip文件并将其发送到客户端的解决方法建议,希望对你解决Spring REST-创建.zip文件并将其发送到客户端有所启发或帮助;

似乎已解决。我更换:

response.setContentType("application/zip");

与:

@requestMapPing(value = "/zip", produces="application/zip")

现在我得到了清晰,漂​​亮的.zip文件:)

如果你有更好或更快速的建议,或者只是想提出建议。

解决方法

我想创建.zip文件,其中包含我从后端收到的压缩文件,然后将此文件发送给用户。两天来我一直在寻找答案,找不到合适的解决方案,也许你可​​以帮我:)

现在,代码是这样的:(我知道我不应该在spring控制器中做所有的事情,但是不要在意,它只是出于测试目的,找到使其工作的方法)

    @requestMapping(value = "/zip")
    public byte[] zipFiles(httpServletResponse responsE) throws IOException{
        //setTing headers
        response.setContentType("application/zip");
        response.setStatus(httpServletResponse.SC_OK);
        response.addHeader("Content-Disposition","attachment; filename=\"test.zip\"");

        //creaTing byteArray stream,make it bufforable and passing this buffor to ZipOutputStream
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream);
        ZipOutputStream zipOutputStream = new ZipOutputStream(bufferedOutputStream);

        //simple file list,just for tests
        ArrayList<File> files = new ArrayList<>(2);
        files.add(new File("README.md"));

        //packing files
        for (File file : files) {
            //new zip entry and copying inputstream with file to zipOutputStream,after all closing streams
            zipOutputStream.putNextEntry(new ZipEntry(file.getName()));
            FileInputStream fileInputStream = new FileInputStream(filE);

            IoutIls.copy(fileInputStream,zipOutputStream);

            fileInputStream.close();
            zipOutputStream.closeEntry();
        }

        if (zipOutputStream != null) {
            zipOutputStream.finish();
            zipOutputStream.flush();
            IoutIls.closeQuietly(zipOutputStream);
        }
        IoutIls.closeQuietly(bufferedOutputStream);
        IoutIls.closeQuietly(byteArrayOutputStream);
        return byteArrayOutputStream.toByteArray();
    }

但是问题是,当我输入URL:localhost:8080 / zip时,使用代码得到的文件是:test.zip.html而不是.zip文件。

当我删除.html扩展名并仅保留test.zip时,它将正确打开,如何避免返回此.html扩展名?为什么要添加?
我不知道还能做什么。我也在尝试用类似以下内容替换ByteArrayOuputStream:

OutputStream outputStream = response.getOutputStream();

并将该方法设置为void,因此它什么也不返回,但是它创建的.zip文件被损坏了。

在解压缩test.zip后在我的MACBook上,我得到的是test.zip.cpgz,它又给了我test.zip文件,依此类推。

如我所说,在Windows上.zip文件已损坏,甚至无法打开。

我还认为,自动删除.html扩展名将是最好的选择,但是如何呢?希望它没有看起来那样困难

大佬总结

以上是大佬教程为你收集整理的Spring REST-创建.zip文件并将其发送到客户端全部内容,希望文章能够帮你解决Spring REST-创建.zip文件并将其发送到客户端所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。