java 下载zip文件格式错误-流方式

办公设备租赁-深圳惠源

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

提示:以下是本篇文章正文内容,下面案例可供参考

一、代码

@Data
@AllArgsConstructor
public class FileItem {

    private File file;

    private String fileName;

    private String businessType;

    private String suffix;

}
 

public static void downloadZip(List<FileItem> files, OutputStream outputStream) {
        ZipOutputStream zipOutStream = null;
        try {
            //-- 包装成ZIP格式输出流
            zipOutStream = new ZipOutputStream(new BufferedOutputStream(outputStream));
            // -- 设置压缩方法
            zipOutStream.setMethod(ZipOutputStream.DEFLATED);
            //-- 将多文件循环写入压缩包
            for (int i = 0; i < files.size(); i++) {
                File file = files.get(i).getFile();
                FileInputStream filenputStream = new FileInputStream(file);
                byte[] data = new byte[(int) file.length()];
                filenputStream.read(data);
                //-- 添加ZipEntry,并ZipEntry中写入文件流,这里,需要防止下载的文件有重名的导致下载失败
                zipOutStream.putNextEntry(new ZipEntry(files.get(i).getFileName()));
                zipOutStream.write(data);
                filenputStream.close();
                zipOutStream.closeEntry();
            }
        } catch (IOException e) {
            e.printStackTrace();
            log.error(e.getMessage());
        }  finally {
            try {
                if (Objects.nonNull(zipOutStream)) {
                    zipOutStream.flush();
                    zipOutStream.close();
                }
                if (Objects.nonNull(outputStream)) {
                    outputStream.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
                log.error(e.getMessage());;
            }
        }
    }
 

二、下载失败-排查

下载后发现文件打不开,报格式错误

1.文件保存到本地

一开始以为是文件问题,后来发现文件保存到本地可以打开,排除

2.PostMan调试接口

以为是流关闭或着流处理有问题,postMan调用后发现下载的文件也可以打开,证明后端接口没有问题,是前端接受方式有错误,前端调整后既可下载成功。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值