分享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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。