分享Spring的下载组件
本文为大家分享了Spring4的下载组件,供大家参考,具体内容如下
packagecom.hnust.common.controller;
importorg.apache.commons.io.FileUtils;
importorg.springframework.http.HttpHeaders;
importorg.springframework.http.HttpStatus;
importorg.springframework.http.MediaType;
importorg.springframework.http.ResponseEntity;
importorg.springframework.web.bind.annotation.RestController;
importjava.io.File;
importjava.io.IOException;
importjava.io.UnsupportedEncodingException;
importjava.net.URLEncoder;
/**
*CreatedbyHeweipoon2016/5/27.
*<p>
*下载通用控制器
*/
@RestController
publicclassDownloadControllerextendsBaseController{
/**
*下载文件通用方法
*
*@paramfile文件对象
*@return文件字节流
*/
publicResponseEntity<byte[]>export(Filefile){
returnexport(file.getName(),file);
}
/**
*下载文件通用方法
*
*@paramfileName文件名称
*@paramfile文件对象
*@return文件字节流
*/
publicResponseEntity<byte[]>export(StringfileName,Filefile){
HttpHeadersheaders=newHttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment",encodeFileName(fileName));
ResponseEntity<byte[]>rs=null;
try{
//这里不能使用HttpStatus.CREATED201是因为IEEdge无法识别,但是Firefoxchrome没问题
rs=newResponseEntity<>(FileUtils.readFileToByteArray(file),
headers,HttpStatus.OK);
}catch(IOExceptione){
//thrownewCommonException(ResponseStatusEnum.FILE_ERROR,e);
}
returnrs;
}
/**
*下载文件的名称,这个是在浏览器那里显示的名称
*
*@paramfileName文件名称
*@return加码的文件名称
*<p>
*IE
*Mozilla/5.0(WindowsNT10.0;WOW64;Trident/7.0;rv:11.0)likeGecko
*<p>
*Edge
*Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/46.0.2486.0Safari/537.36Edge/13.10586
*<p>
*Firefox
*Mozilla/5.0(WindowsNT10.0;WOW64;rv:46.0)Gecko/20100101Firefox/46.0
*<p>
*Chrome
*Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/47.0.2526.106Safari/537.36
*/
privateStringencodeFileName(StringfileName){
Stringname=fileName;
try{
Stringagent=request.getHeader("USER-AGENT").toLowerCase();
if(null!=agent&&(agent.contains("msie")||agent.contains("edge"))){//IEedge
name=URLEncoder.encode(fileName,"UTF-8");
}elseif(agent.contains("safari")||agent.contains("chrome")||agent.contains("firefox")){//safarichromefirefox
name=newString(fileName.getBytes("UTF-8"),"iso-8859-1");
}else{//IE10IE11
name=URLEncoder.encode(fileName,"UTF-8");
}
//把加号还原为空格(IEEdge有问题)
name=name.replace("+","%20");
}catch(UnsupportedEncodingExceptione){
//thrownewCommonException(ResponseStatusEnum.FAILURE,e);
}
returnname;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
