Spring MVC 文件下载codes

来源:互联网 发布:10086网上营业厅软件 编辑:程序博客网 时间:2024/05/16 08:10

@RequestMapping(params ="downfile")
public void downfile(HttpServletRequest request,HttpServletResponse response)throwsException{
    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 =newFile(userFiles.getFileCurrPath()+userFiles.getFileName()+"."+userFiles.getFileType());
            if(!downFiles.exists()){
                 
                return;
                 
            }
            try{
                fis =newFileInputStream(downFiles);
                bis =newBufferedInputStream(fis);
                fos = response.getOutputStream();
                bos =newBufferedOutputStream(fos);
                ServletUtils.setFileDownloadHeader(request,response, userFiles.getFileName()+"."+userFiles.getFileType());
                intbyteRead =0;
                byte[] buffer =newbyte[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");
        }elseif(null!= agent && -1 != agent.indexOf("Mozilla")){
            encodedfileName =newString (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 extendsRootAction {
 
    // 下载mime//application/vnd.ms-excel
    privateString contentType = "application/vnd.ms-excel";
    // 下在文件名字,,一般取值为attachement;filename="ss.pdf"
    privateString fileName;
    privateString filePath;
 
    publicString getFileName() throwsUnsupportedEncodingException {
        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");
            }
        }
        returnfileName;
    }
 
    /**
     * 需要通过 redirect:download 传递文件路径或者文件类型
     *
     * @param path
     * @param type
     * @return
     * @throws IOException
     */
    @ResponseBody
    @RequestMapping(value ="download")
    publicResponseEntity<byte[]> download(
            @RequestParam(value ="path") String path,
            @RequestParam(value ="type", required =false) String type)
            throwsIOException {
        // 确定各个成员变量的值
        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);
 
        returnentity;
    }
}




0 0
原创粉丝点击