Spring MVC 文件下载codes


@RequestMapping (params = "downfile" )
public void downfile(HttpServletRequest request,HttpServletResponse response) throws Exception{
     Long fileID = ServletRequestUtils.getLongParameter(request, "id" , 0 );
     BufferedInputStream bis = null ;
     BufferedOutputStream bos = null ;
     OutputStream fos = null ;
     InputStream fis = null ;
     String result = "" ;
     if ( null != fileID){
 
         UserFiles userFiles = this .userFileDao.findObject(fileID);
         if (userFiles != null ){
             File downFiles = new File(userFiles.getFileCurrPath()+userFiles.getFileName()+ "." +userFiles.getFileType());
             if (!downFiles.exists()){
                 
                 return ;
                 
             }
             try {
                 fis = new FileInputStream(downFiles);
                 bis = new BufferedInputStream(fis);
                 fos = response.getOutputStream();
                 bos = new BufferedOutputStream(fos);
                 ServletUtils.setFileDownloadHeader(request,response, userFiles.getFileName()+ "." +userFiles.getFileType());
                 int byteRead = 0 ;
                 byte [] buffer = new byte [ 8192 ];
                 while ((byteRead=bis.read(buffer, 0 , 8192 ))!=- 1 ){
                     bos.write(buffer, 0 ,byteRead);
                 }
                 
                 bos.flush();
                 fis.close();
                 bis.close();
                 fos.close();
                 bos.close();
             } catch (Exception e) {
                 log.info( "下载失败了......" );
             }
         }
     }
 
}

/**
  * 设置让浏览器弹出下载对话框的Header.
  * 根据浏览器的不同设置不同的编码格式  防止中文乱码
  * @param fileName 下载后的文件名.
  */
public static void setFileDownloadHeader(HttpServletRequest request,HttpServletResponse response, String fileName) {
     try {
         //中文文件名支持
         String encodedfileName = null ;
         String agent = request.getHeader( "USER-AGENT" );
         if ( null != agent && - 1 != agent.indexOf( "MSIE" )){ //IE
             encodedfileName = java.net.URLEncoder.encode(fileName, "UTF-8" );
         } else if ( null != agent && - 1 != agent.indexOf( "Mozilla" )){
             encodedfileName = new String (fileName.getBytes( "UTF-8" ), "iso-8859-1" );
         } else {
             encodedfileName = java.net.URLEncoder.encode(fileName, "UTF-8" );
         }
         response.setHeader( "Content-Disposition" , "attachment; filename=\"" + encodedfileName + "\"" );
     } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
     }
}


package com.sniper.springmvc.action;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
 
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
 
import com.sniper.springmvc.utils.ValidateUtil;
 
@Controller
public class FileDownloadAction extends RootAction {
 
     // 下载mime//application/vnd.ms-excel
     private String contentType = "application/vnd.ms-excel" ;
     // 下在文件名字,,一般取值为attachement;filename="ss.pdf"
     private String fileName;
     private String filePath;
 
     public String getFileName() throws UnsupportedEncodingException {
         fileName = filePath.substring(filePath.lastIndexOf( "/" ) + 1 );
         String Agent = request.getHeader( "User-Agent" );
         if ( null != Agent) {
             Agent = Agent.toLowerCase();
             if (Agent.indexOf( "firefox" ) != - 1 ) {
                 fileName = new String(fileName.getBytes(), "iso8859-1" );
             } else if (Agent.indexOf( "msie" ) != - 1 ) {
                 fileName = URLEncoder.encode(fileName, "UTF-8" );
             } else {
                 fileName = URLEncoder.encode(fileName, "UTF-8" );
             }
         }
         return fileName;
     }
 
     /**
      * 需要通过 redirect:download 传递文件路径或者文件类型
      *
      * @param path
      * @param type
      * @return
      * @throws IOException
      */
     @ResponseBody
     @RequestMapping (value = "download" )
     public ResponseEntity< byte []> download(
             @RequestParam (value = "path" ) String path,
             @RequestParam (value = "type" , required = false ) String type)
             throws IOException {
         // 确定各个成员变量的值
         this .filePath = path;
 
         if (ValidateUtil.isValid(contentType)) {
             this .contentType = type;
         }
 
         HttpHeaders headers = new HttpHeaders();
         byte [] body = null ;
         HttpStatus httpState = HttpStatus.NOT_FOUND;
         File file = new File(path);
         if (file.exists() && file.isFile()) {
 
             InputStream is = new FileInputStream(file);
             body = new byte [is.available()];
             is.read(body);
             is.close();
             headers.add( "Content-Type" , this .contentType);
             headers.add( "Content-Length" , "" + body.length);
             headers.add( "Content-Disposition" , "attachment;filename="
                     + getFileName());
             httpState = HttpStatus.OK;
 
         }
 
         ResponseEntity< byte []> entity = new ResponseEntity<>(body, headers,
                 httpState);
 
         return entity;
     }
}




Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值