文件下载工具类2(可用,支持中文名)

package com.sinosoft.cm.course.util;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class DownloadUtil {

    /**

     * 下载文件时指定下载名

     * 

     * @param request HttpServletRequest

     * @param response HttpServletResponse

     * @param filePath 文件全路径

     * @param fileName 指定客户端下载时显示的文件名

     * @throws IOException

     */

    public static void downloadFile(HttpServletRequest request, HttpServletResponse response,

                                    String filePath, String fileName)

                                        throws IOException {

        BufferedInputStream bis = null;

        BufferedOutputStream bos = null;

        bis = new BufferedInputStream(new FileInputStream(filePath));

        bos = new BufferedOutputStream(response.getOutputStream());

        long fileLength = new File(filePath).length();

        response.setCharacterEncoding("UTF-8");

        response.setContentType("multipart/form-data");

        /*

         * 解决各浏览器的中文乱码问题

         */

        String userAgent = request.getHeader("User-Agent");

        byte[] bytes = userAgent.contains("MSIE") ? fileName.getBytes() : fileName.getBytes(

            "UTF-8");

            // fileName.getBytes("UTF-8")处理safari的乱码问题

            // fileName = new String(bytes, "ISO-8859-1"); // 各浏览器基本都支持ISO编码

        // 解决各浏览器的中文乱码问题

        if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {

            fileName = URLEncoder.encode(fileName, "UTF-8");

        } else {

            fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");

        }

        response.setHeader("Content-disposition",

            String.format("attachment; filename=\"%s\"", fileName));

        response.setHeader("Content-Length", String.valueOf(fileLength));

        byte[] buff = new byte[2048];

        int bytesRead;

        while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {

            bos.write(buff, 0, bytesRead);

        }

        bis.close();

        bos.close();

    }

    // /**

    // * 下载文件时不指定下载文件名称

    // *

    // * @param request HttpServletRequest

    // * @param response HttpServletResponse

    // * @param filePath 文件全路径

    // * @param showFileName 文件名称

    // * @throws IOException

    // */

    // public static void commDownloadFile(HttpServletRequest request, HttpServletResponse

    // response,

    // String filePath, String showFileName)

    // throws IOException {

    // downloadFile(request, response, filePath, showFileName);

    // }

}

猜你喜欢

转载自blog.csdn.net/chinaxiaofeng8/article/details/82458849
今日推荐