SpringMVC用户请求下载文件

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import com.talkweb.dao.FILE_RECORDMapper;
import com.talkweb.po.FILE_RECORD;


@Controller
public class DownloadFileController {
    
    private static Logger logger = Logger.getLogger(DownloadFileController.class);
    
    @Autowired
    FILE_RECORDMapper fILE_RECORDMapper;
    
    
    @RequestMapping(value = "/downloadFile")
    public ResponseEntity<byte[]> downloadFile(Long D_file_id,HttpServletRequest request) {
        try {
            logger.info("文件下载接口被调用,接收到参数:[D_file_id:" + D_file_id + "]");
            FILE_RECORD fILE_RECORD = fILE_RECORDMapper.selectByPrimaryKey(D_file_id);
            String sFilePath  = fILE_RECORD.getsFilePath();
            String sFileName = fILE_RECORD.getsFileName();
            String rFileName = fILE_RECORD.getrFileName();
            String fullFilePath = sFilePath+sFileName;
            
            InputStream in=new FileInputStream(new File(fullFilePath));//将该文件加入到输入流之中
            byte[] body=null;
             body=new byte[in.available()];// 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数
             in.read(body);//读入到输入流里面
            
             rFileName=new String(rFileName.getBytes("gbk"),"iso8859-1");//防止中文乱码
            HttpHeaders headers=new HttpHeaders();//设置响应头
            headers.add("Content-Disposition", "attachment;filename="+rFileName);
            HttpStatus statusCode = HttpStatus.OK;//设置响应吗
            ResponseEntity<byte[]> response=new ResponseEntity<byte[]>(body, headers, statusCode);
            return response;
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            logger.error("文件下载异常:"+e.toString());
        }
        logger.error("文件下载异常,未知原因");
        return null;
    }
    
}
原文地址:https://www.cnblogs.com/RivenLw/p/10341908.html