`
annan211
  • 浏览: 461189 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 实现多文件压缩导出操作

    博客分类:
  • java
 
阅读更多

1 controller
@RequestMapping(value = "/{project}/{moduel}/export/product/{productId}", method = RequestMethod.GET)
    public void exportProductData(HttpServletRequest request, HttpServletResponse response,
            @PathVariable("project") String project, @PathVariable("moduel") String moduel,
            @PathVariable("productId") String productId) throws IOException {
        String baseUrl = String.format("/%s/%s/%s", project, moduel, "export/product");
        LOG.info(String.format("正在接收%s请求", baseUrl));

        Map<String, Object> reqMap = new HashMap<String, Object>();
        reqMap.put("productId", productId);
        RtResponse rtResponse = reqUrlDefService.getResponse(baseUrl, request, reqMap);
        Map<String,Object> data = (Map<String, Object>) rtResponse.getData();
        
        Map<String,Map<String,Object>> bytes = (Map<String,Map<String,Object>>) data.get("files");
        
        List<File> files = new ArrayList<File>();
        
        for(Entry<String, Map<String, Object>> map : bytes.entrySet()){
        	Map<String,Object> byteMap = map.getValue();
        	String fileName = (String) byteMap.get("fileName");
            String contentType = (String) byteMap.get("contentType");
            byte[] byt = (byte[]) byteMap.get("fileByte");
            File file = new File(fileName);
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(byt);
            files.add(file);
            fos.close();
        }
        
        String filename = URLEncoder.encode("product-struct.zip", "UTF-8");
        byte[] buf = new byte[1024];  
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(filename));  
        out.setMethod(ZipOutputStream.DEFLATED);
        for (int i = 0; i < files.size(); i++) {  
            FileInputStream in = new FileInputStream(files.get(i));  
            out.putNextEntry(new ZipEntry(files.get(i).getName()));  
            int len;  
            while ((len = in.read(buf)) > 0) {  
                out.write(buf, 0, len);  
            }  
            out.closeEntry();  
            in.close();  
        }  
        out.close();  
        
        int bytesRead = 0;
        byte[] buffer = new byte[8092];
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        InputStream is = new FileInputStream(filename);
        while ((bytesRead = is.read(buffer, 0, 8092)) != -1) {
        	bos.write(buffer, 0, bytesRead);
        }
        
        response.reset();
        response.setHeader("Content-disposition", "attachment;filename=" + filename);
        response.setContentType("application/x-zip-compressed");

        OutputStream os = response.getOutputStream();
        os.write(bos.toByteArray());
        os.flush();
        os.close();
        
        
    }


2 service
@Override
	public RtResponse exportProductInfo(RtRequest request) throws Exception {
		RtResponse response = new RtResponse();
        Integer code = ResultCode.FAILURE;
        
        String dataJson = "";
        
		Map<String,Map<String,Object>> bytes = new HashMap<String,Map<String,Object>>();
		//产品图片
		if(AppUtils.isNotBlank(adjuncts)){
			for(ProductAdjunct pa : adjuncts){
				String fileId = pa.getAdjunctPath();
	        	GridFS gridFS = new GridFS(mongotemplate.getDb(), "file_collections");
    	        DBObject query = new BasicDBObject("_id", fileId);
    	        GridFSDBFile gridFSDBFile = gridFS.findOne(query);
    	        
    	        logger.info("附件接口 文件流内容...{}", gridFSDBFile.getInputStream());
    	        Map<String, Object> maps = new HashMap<String, Object>();
    	        maps.put("fileName", pa.getAdjunctClass()+"-+"+gridFSDBFile.getFilename());
    	        maps.put("contentType", gridFSDBFile.getContentType());
    	        maps.put("fileByte", FileUtils.input2byte(gridFSDBFile.getInputStream()));
    	        maps.put("type", pa.getAdjunctClass());
    	        bytes.put(pa.getAdjunctClass(),maps);
	        }
		}
		
		dataJson = JsonUtil.javaObjToJson(productDataObject);
		Map<String, Object> maps = new HashMap<String, Object>();
		maps.put("fileName", "ProductData.txt");
        maps.put("contentType", "application/txt");
        maps.put("fileByte", dataJson.getBytes("UTF-8"));
        maps.put("type", "product");
		bytes.put("product",maps);
		
		data.put("files",bytes);
		code = ResultCode.SUCCESS;
		response.setCode(code);
		response.setData(data);
		
		return response;
	}


分享到:
评论

相关推荐

    java导出csv文件并压缩(含下载提示功能)

    接下来,我们要实现将CSV文件压缩成ZIP格式。Java标准库中的`java.util.zip`包提供了`ZipOutputStream`类,可以方便地完成这一任务: ```java import java.io.*; import java.util.zip.*; public class ...

    java 实现Excel压缩成Zip导出.docx

    然而,当需要导出多个 Excel 文件时,使用者将频繁操作,这样就严重降低了项目的友好交互性以及易用性。为了解决这个问题,本文将介绍如何使用 Java 实现 Excel 压缩成 Zip 导出。 首先,需要创建一个样例工程 ...

    Java多个文件根据URL下载后打包zip导出.zip

    在Java编程中,有时我们需要从网络上下载多个文件并将其打包为一个压缩文件,例如ZIP格式,以便于存储或分发。这个过程涉及到文件I/O操作、网络请求以及压缩算法的使用。以下是对这个场景的详细说明: 1. **网络...

    Java实现将多目录多层级文件打成ZIP包,以及解压ZIP包

    总结起来,Java通过Apache Commons Compress库提供的API,可以方便地实现多层级目录的文件压缩和解压。`FileUtils.java`类是这个功能的具体实现,它封装了上述的压缩和解压过程,使开发者能够轻松地在代码中调用这些...

    多个excel导出压缩成zip 文件 数据量大导出

    - 将多个Excel文件压缩成一个zip文件可以大大减小存储空间需求,便于传输和分享。 - 使用zip压缩格式,能有效降低文件体积,因为zip支持有损和无损压缩算法,可以根据需要选择合适的压缩级别。 - 在处理大量文件...

    Java 批量文件压缩导出并下载到本地示例代码

    本文主要介绍了Java 批量文件压缩导出并下载到本地示例代码的实现思路和示例代码。该示例代码主要使用了Apache的ZipOutputStream来实现文件压缩,并使用POI库来处理Excel文件。 首先,在Controller层中,我们可以...

    CSV大数据分批并压缩导出

    在“csv大数据导出”这个压缩包文件中,可能包含了示例代码、教程文档或者案例研究,帮助开发者理解如何实施这种分批并压缩导出的方法。通过学习和实践,开发者可以掌握在大数据场景下,如何利用CSV格式和分批压缩...

    java代码利用svnkit操作svn导出某版本或多个版本修改的文件

    利用svnkit操作svn,实现对版本修改文件的导出,可以导出多个版本,.java文件将会在本地取出.class文件,导出后压缩成压缩包,主要用于服务器上的资源更新,不需要开发人员去找到对应的.class文件或其他文件压缩然后...

    Java多文件以ZIP压缩包导出的实现方法

    Java多文件以ZIP压缩包导出的实现方法主要围绕着Java编程语言对文件进行打包压缩的过程展开,涵盖了如何使用Java对服务器上的图片或其他文件进行压缩并导出为ZIP格式的压缩包。在实现这一功能的过程中,开发者需要对...

    java 实现PDF导出功能需要的中文支持文件

    在Java开发中,实现PDF导出功能是一项常见的需求,特别是在处理包含中文字符的文档时,确保中文支持至关重要。本文将详细讲解如何在Java环境中利用相关的库和资源来实现在PDF中正确显示中文字符。 首先,PDF...

    Java+PDF批量压缩图片格式的PDF档(源码Demo)

    原理:压缩图片然后再另存成新文件 实例如下: ├── META-INF │ └── MANIFEST.MF ├── pom.xml └── src ├── main │ ├── java │ │ ├── META-INF │ │ │ └── MANIFEST.MF │ │ ├...

    java后台批量下载文件并压缩成zip下载的方法

    在Java后台中,批量下载文件压缩成zip下载可以使用Java的文件输入输出流和zip压缩流来实现。首先,需要在Servlet中获取文件列表,然后使用循环将文件一个个添加到zip文件中,最后下载zip文件到本地桌面。 java批量...

    JAVA实现多个文件压缩为一个zip文件

    很简单的代码,很轻松的实现将多个文件压缩成一个包

    Java实现的带密码压缩与解压zip文件源码

    在Java编程环境中,处理压缩和解压缩文件是一...以上是关于Java实现带密码的ZIP文件压缩和解压的基本概念和实现细节。通过深入理解这些知识点,开发者可以构建自己的安全文件处理工具,满足对数据隐私和安全性的需求。

    JAVA实现Excel导入/导出的功能实现

    请到网站http://www.apache.org/dyn/closer.cgi/poi/右击超链接2.5.1.zip下载压缩包poi-bin-2.5.1-final-20040804.zip,解压缩后得到如图2.1所示的目录结构。我们主要用到poi-2.5.1-final-20040804.jar这个库文件。...

    java将数据导入多个excel并压缩,亲测可用

    综上所述,实现“java将数据导入多个excel并压缩”的功能需要对Java的文件操作、Excel处理、文件压缩以及Web开发有深入的理解。通过Apache POI库处理Excel,结合Java内置的压缩API,我们可以创建一个高效且可扩展的...

    java导出文件到 pdf,excel,word

    在Java编程环境中,导出数据到PDF、Excel和Word格式是一项常见的需求,这通常涉及到文件处理和格式转换。...对于压缩包子文件“导出文件”,可能包含了示例代码或导出的样本文件,可以进一步研究和学习。

    使用POI,实现excel文件导出,图片url导出文件,图片和excel文件导出压缩包

    在IT行业中,Apache POI是...总之,Apache POI库为Java开发者提供了强大的Excel操作能力,配合网络请求和压缩技术,可以实现各种复杂的文件处理需求。在实际开发中,理解并熟练掌握这些技术,能够极大地提升工作效率。

    poi多线程大数据导出excel文件.zip

    在IT行业中,处理大数据量的Excel文件是一项挑战,特别是在数据导出时,如果单线程操作,可能会导致性能瓶颈和长时间的等待。Apache POI是一个流行的Java库,它允许开发者创建、修改和显示Microsoft Office格式的...

    springboot整合easypoi实现文件导入导出OSS文件上传和下载。OSS图片导出

    在本项目中,我们主要探讨如何使用SpringBoot框架与阿里云OSS(Object Storage Service)服务相结合,通过Easypoi库实现文件的导入、导出功能,以及OSS上的文件上传和下载。Easypoi是一个强大的Java操作Excel的工具...

Global site tag (gtag.js) - Google Analytics