合并分割后的小文件 @ApiOperation(value = "合并下载文件", notes = "合并下载文件", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_VALUE) @RequestMapping(value = "/mergePartFiles", method = RequestMethod.GET) pu
@ApiOperation(value = "合并下载文件", notes = "合并下载文件", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_VALUE)
@RequestMapping(value = "/mergePartFiles", method = RequestMethod.GET)
public void mergePartFiles(HttpServletResponse response, String fileName){
Token token = ConcurrentHashMapUtil.getToken(osv3Params.getToken());
if (StringUtils.isEmpty(token)){
//手动认证
AuthenticateHandler.start(osv3Params);
token = ConcurrentHashMapUtil.getToken(osv3Params.getToken());
}
try {
//创建临时文件
File tempFile = File.createTempFile(fileName, null);
OSClient.OSClientV3 clientV3 = OSFactory.clientFromToken(token);
List
list = clientV3.objectStorage().objects().list("part");
//创建输出流。
BufferedOutputStream bosFinal= new BufferedOutputStream(
new FileOutputStream(tempFile));
//构建流集合。
Vector
vector = new Vector
(); //int d=0; for (int i = 0; i < list.size(); i++) { // d = d+i*d; DLPayload dlPayload = clientV3.objectStorage().objects().download("part", list.get(i).getName()); InputStream inputStream = dlPayload.getInputStream(); vector.addElement(inputStream); } Enumeration
e = vector.elements(); //创建一个合并流的对象 SequenceInputStream sis = new SequenceInputStream(e); //读写数据 byte[] buf = new byte[1024]; int len = 0; //6.通过response对象获取OutputStream流 OutputStream out = response.getOutputStream(); response.setHeader("content-type", "text/html;charset=UTF-8"); response.setHeader("content-disposition", "attachment;filename="+fileName); while ((len = sis.read(buf)) != -1) { //8.使用OutputStream将缓冲区的数据输出到客户端浏览器 out.write(buf,0,len); } } catch (IOException e) { e.printStackTrace(); } }
