Java 文件下載工具類


Java 文件下載工具類

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static Logger logger = LoggerFactory.getLogger(DownloadUtil.class);

文件下載方法

/**
 * 文件下載方法
 * @param response
 * @param filePath
 * @param encode
 */
public static void download(HttpServletResponse response, String filePath, String encode) {
    response.setContentType("text/html;charset=" + encode);
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;
    String downLoadPath = filePath;
    try {
        File file = new File(downLoadPath);
        long fileLength = file.length();
        String fileName = file.getName(); 
        response.setContentType("application/x-msdownload;");
        response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes(encode), "ISO8859-1"));
        response.setHeader("Content-Length", String.valueOf(fileLength));
        bis = new BufferedInputStream(new FileInputStream(downLoadPath));
        bos = new BufferedOutputStream(response.getOutputStream());
        byte[] buff = new byte[2048];
        int bytesRead;
        while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
            bos.write(buff, 0, bytesRead);
        }
    } catch (Exception e) {
        logger.error(e.getMessage());
    } finally {
        if (bis != null)
            try {
                bis.close();
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
        if (bos != null)
            try {
                bos.close();
            } catch (IOException e) {
                logger.error(e.getMessage());
            }
    }
}

以流的方式下載

/**
 * 以流的方式下載
 * @param response
 * @param filePath
 * @param encode
 * @return response
 */
public static HttpServletResponse downloadStream(HttpServletResponse response, String filePath, String encode) {
    response.setContentType("text/html;charset=" + encode);
    try {
        // path是指欲下載的文件的路徑
        File file = new File(filePath);
        // 取得文件名
        String filename = file.getName();
        // 取得文件的后綴名
        // String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
        // 以流的形式下載文件
        InputStream fis = new BufferedInputStream(new FileInputStream(filePath));
        byte[] buffer = new byte[fis.available()];
        fis.read(buffer);
        fis.close();
        // 清空response
        response.reset();
        // 設置response的Header
        response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(encode), "ISO8859-1"));
        response.addHeader("Content-Length", "" + file.length());
        OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
        response.setContentType("application/octet-stream");
        toClient.write(buffer);
        toClient.flush();
        toClient.close();
    } catch (IOException ex) {
        logger.error(ex.getMessage());
    }
    return response;
}

下載本地文件

/**
 * 下載本地文件
 * @param response
 * @param filePath
 * @param encode
 */
public static void downloadLocal(HttpServletResponse response, String filePath,String encode) {
    response.setContentType("text/html;charset=" + encode);
    try {
        // 讀到流中
        InputStream inStream = new FileInputStream(filePath); // 文件的存放路徑
        // path是指欲下載的文件的路徑
        File file = new File(filePath);
        // 取得文件名
        String fileName = file.getName();
        // 設置輸出的格式
        response.reset();
        response.setContentType("bin");
        response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes(encode), "ISO8859-1") + "\"");
        // 循環取出流中的數據
        byte[] b = new byte[100];
        int len;
        while ((len = inStream.read(b)) > 0) {
            response.getOutputStream().write(b, 0, len);
        }
        inStream.close();
    } catch (IOException e) {
        logger.error(e.getMessage());
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM