java 文件流的处理方式 文件打包成zip

网友投稿 643 2022-09-21


java 文件流的处理方式 文件打包成zip

目录java 文件流的处理 文件打包成zip1、下载文件到本地2、java后端下载3、文件打包成zip后台多文件打包成zip返回流 前台提供按钮一键下载

java 文件流的处理 文件打包成zip

1、下载文件到本地

public void download(HttpServletResponse response){

String filePath ="";//文件路径

String fileName ="";//文件名称

// 读到流中

InputStream inStream = new FileInputStream(filePath);

// 设置输出的格式

response.reset();

response.setContentType("bin");

response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

IOUtils.copy(inStream, response.getOutputStream());

}

2、java后端下载

方式一:

new URL(fileUrl + item.getcBhFileserver()).openStream()

方法二:

public Boolean addFile(String url, String id, String fileName) {

RequestCallback requestCallBack = new RequestCallback() {

@Override

public void doWithRequest(ClientHttpRequest request) throws IOException {

request.getHeaders().add("accept", MediaType.APPLICATION_OCTET_STREAM_VALUE);

}

};

ResponseExtractor responseExtractor = new ResponseExtractor() {

@Override

public Boolean extractData(ClientHttpResponse response) throws IOException {

if (response.getStatusCode() == HttpStatus.OK) {

//得到文件流

InputStream input = response.getBody();

return true;

}

return false;

}

};

return restTemplate.execute(url, HttpMethod.GET, requestCallBack, responseExtractor, id);

}

3、文件打包成zip

public void zipFilesAll() throws Exception {

String zipPath = "";//zip包路径

String zipFileName = "";//zip包名称

File zipFile = new File(zipFileName .toString());

// 创建 FileOutputStream 对象

FileOutputStream fileOutputStream = null;

// 创建 ZipOutputStream

ZipOutputStream zipOutputStream = null;

try {

//创建文件夹

zipFile = new File(zipPath );

FileUtils.forceMkdir(zipFile);

//创建文件

zipFile = new File(zipFileName .toString());

if (!zipFile.exists()) {

zipFile.createNewFile();

}

// 实例化 FileOutputStream 对象

fileOutputStream = new FileOutputStream(zipFileName.toString());

// 实例化 ZipOutputStream 对象

zipOutputStream = new ZipOutputStream(fileOutputStream);

// 创建 ZipEntry 对象

ZipEntry zipEntry = null;

for (CL cl: ClList) {

// 实例化 ZipEntry 对象,源文件数组中的当前文件

zipEntry = new ZipEntry(tCltjjl.getcClmc() + ".zip");

zipOutputStream.putNextEntry(zipEntry);

IOUtils.copy(new FileInputStream(cl.getcPath(), zipOutputStream);

}

} catch (Exception e) {

}finally{

//记得删除文件

}

}

后台多文件打包成http://zip返回流 前台提供按钮一键下载

项目pom文件添加二维码操作,和文件打包的maven支持:

net.glxn.qrgen

javase

2.0

org.apache.commons

commons-compress

1.12

前台代码:

js(我用了thymeleaf模板)代码:

后台代码:

/**

* @Author Ni Klaus

* @Description //TODO 门店总代生成打包产品二维码zip

* @Date 上午 10:38 2019/8/20 0020

* @Param [params,response]

* @return void

**/

@RequestMapping({"getStreamZip"})

@ResponseBody

public void findList(@RequestParam Map params,HttpServletResponse response) throws Exception {

String agencyId = (String) params.get("agencyId");

AgencyAccount agencyAccount = agencyAccountService.getAccountByAgencyId(agencyId);

//这里设置打包后的zip文件名

String downloadName = agencyAccount.getName()+".zip";

try{

response.setContentType("multipart/form-data");

response.setHeader("Content-Disposition", "attachment;fileName=" + new String(downloadName.getBytes(),"ISO8859-1"));

}catch(UnsupportedEncodingException e){

log.error("----------下载文件名编码时出现错误------"+e.getMessage());

}

OutputStream outputStream = response.getOutputStream();

ZipArchiveOutputStream zous = new ZipArchiveOutputStream(outputStream);

zous.setUseZip64(Zip64Mode.AsNeeded);

zous.setEncoding("utf-8");

try{

//我这里是通过不同产品类型生成不同产品的二维码图片流

//具体你想生成什么类型的多个文件打包,只需要循环创建ArchiveEntry 然后zous.putArchiveEntry(entry)就可以了

StoreProductType[] storeProductTypes = StoreProductType.values();

for (StoreProductType storeProductType : storeProductTypes) {

String url = "http://m.xxx.cn/goods/pay/xxx.html?productid="+storeProductType.getProductId()

+ "&agencycode="+ agencyId +"&channelid=def&appfrom=sqjk&isstore=1";

//打包文件里的每个文件的名字

String imgName = storeProductType.getDescription()+".png";

ByteArrayOutputStream out = QRCode.from(url).to(ImageType.PNG).withSize(300,300).stream();

byte[] bytes = out.toByteArray();

ArchiveEntry entry = new ZipArchiveEntry(imgName);

zous.putArchiveEntry(entry);

zous.write(bytes);

zous.closeArchiveEntry();

if (out != null) {

out.close();

}

}

}catch (Exception e){

e.printStackTrace();

log.error("---------------门店总代生成二维码打包流出错----------------"+e.getMessage());

}finally{

if(outputStream != null){

outputStream.close();

}

if(zous != null){

zous.close();

}

}

}

最后效果:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:CCNP(ISCW)实验:配置GRE隧道
下一篇:做了几年的网工也未必了解VLAN和VXLAN的区别,今天我来告诉你!(网桥和vlan)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~