IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Java操作ZIp文件 -> 正文阅读

[移动开发]Java操作ZIp文件

Java操作文件打包下载

    public void downloadEcsZip(String fileName,List<Map<String,String>> filesMap,HttpServletResponse response) throws AppException {

        // 设置浏览器显示的内容类型为Zip
        response.setContentType("application/zip");
        // 设置文件名
        try {
            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName,"UTF-8"));
        } catch (UnsupportedEncodingException e) {
            throw new AppException("不支持的编码格式");
        }
        try(ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) {
            // 读取文件的缓存
            EcsHelper ecsHelper = EcsHelper.getInstance();
            for (Map<String,String> file : filesMap) {
                String ecsId = file.get("ecsId");
                String name = file.get("name");
                InputStream inputStream = ecsHelper.readObject(ecsId);
                // 把inputstream写入到zip流里
                writeToZipFile(zos, inputStream, name);
            }
        }catch (Exception e){
            LogHelper.error("下载文件异常!", e);
            throw new AppException("下载文件异常!", e);
        }
    }
    
    private void writeToZipFile(ZipOutputStream zipOutput, InputStream inputStream, String fileName)
            throws IOException {
        try (BufferedInputStream bis = new BufferedInputStream(inputStream)) {
            ZipEntry entry = new ZipEntry(fileName);
            zipOutput.putNextEntry(entry);
            // 向压缩文件中输出数据
            int length;
            byte[] buffer = new byte[4096];
            while ((length = bis.read(buffer)) != -1) {
                zipOutput.write(buffer, 0, length);
            }
        } catch (IOException e) {
            LogHelper.error("将文件写入压缩文件中出现异常:", e);
        } finally {
            if (zipOutput != null) {
                zipOutput.flush();
                zipOutput.closeEntry();
            }
        }
    }

Java操作文件打包上传

    public String packageFile(String fileName, List<Map<String, String>> filesMap,String email) throws AppException {
      String encodeName;
      byte[] srcs;
      // 设置文件名
      try {
          encodeName = URLEncoder.encode(fileName, "UTF-8");
      } catch (UnsupportedEncodingException e) {
          throw new AppException("不支持的编码格式");
      }

      try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
           ZipOutputStream zos = new ZipOutputStream(bos)) {
          // 读取文件的缓存
          EcsHelper ecsHelper = EcsHelper.getInstance();
          for (Map<String, String> file : filesMap) {
              String ecsId = file.get("ecsId");
              String name = file.get("name");
              InputStream inputStream = ecsHelper.readObject(ecsId);
              // 把inputstream写入到zip流里
              writeToZipFile(zos, inputStream, name);
              log.info("打包单个文件进zip完成,zipName="+fileName+",name="+name+",ecsId="+ecsId);
          }
          zos.finish();
          srcs = bos.toByteArray();
          log.info("打包文件进zip完成,zipName="+fileName);
      } catch (Exception e) {
          LogHelper.error("下载Ecs文件异常!", e);
          throw new AppException("下载Ecs文件异常!", e);
      }

      String url= "";
      try (InputStream stream = new ByteArrayInputStream(srcs)) {
          S3ObjectMetadata metadata = new S3ObjectMetadata();
          metadata.setContentDisposition("attachment; filename=" + encodeName);
          String packageBucketName = AppConfig.getInstance().getPackageBucketName();
          String key = CommonUtils.getUUID("N");
          EcsHelper.getInstance().createObject(key, stream, packageBucketName,"application/zip", metadata);
          log.info("上传zip到ecs完成,zipName="+fileName);
          url = EcsHelper.getInstance().getStaticUrl(key, packageBucketName);
          log.info("获取zip链接完成,zipName="+fileName);
      }catch (Exception e){
          LogHelper.error("上传Zip文件异常!", e);
          throw new AppException("上传文件异常!", e);
      }

      return url;
  }

  private void writeToZipFile(ZipOutputStream zipOutput, InputStream inputStream, String fileName)
          throws IOException {
      try (BufferedInputStream bis = new BufferedInputStream(inputStream)) {
          ZipEntry entry = new ZipEntry(fileName);
          zipOutput.putNextEntry(entry);
          // 向压缩文件中输出数据
          int length;
          byte[] buffer = new byte[1024];
          while ((length = bis.read(buffer)) != -1) {
              zipOutput.write(buffer, 0, length);
          }
      } catch (IOException e) {
          LogHelper.error("将文件写入压缩文件中出现异常:", e);
      } finally {
          if (zipOutput != null) {
              zipOutput.flush();
              zipOutput.closeEntry();
          }
      }
  }

注意事项

上传时ZipOutputStream 要手动finish();否则会导致压缩包解压出现末尾损坏的警告。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:41:17  更:2022-03-10 22:44:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 19:06:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码