HttpFileHelper.java 2.08 KB
Newer Older
yanzg's avatar
yanzg committed
1 2
package com.yanzuoguang.cloud.helper;

yanzg's avatar
yanzg committed
3
import com.yanzuoguang.util.helper.HttpHelper;
yanzg's avatar
yanzg committed
4
import com.yanzuoguang.util.helper.StringHelper;
yanzg's avatar
yanzg committed
5

yanzg's avatar
yanzg committed
6
import javax.servlet.ServletOutputStream;
yanzg's avatar
yanzg committed
7 8
import javax.servlet.http.HttpServletResponse;
import java.io.*;
yanzg's avatar
yanzg committed
9
import java.net.URLEncoder;
yanzg's avatar
yanzg committed
10 11 12

/**
 * HTTP文件
yanzg's avatar
yanzg committed
13
 *
yanzg's avatar
yanzg committed
14
 * @author 颜佐光
yanzg's avatar
yanzg committed
15
 */
yanzg's avatar
yanzg committed
16
public class HttpFileHelper extends HttpHelper {
yanzg's avatar
yanzg committed
17

yanzg's avatar
yanzg committed
18 19 20 21 22 23 24 25 26 27 28
    /**
     * 下载文件
     *
     * @param serverFilePath 下载文件来源路径
     * @param saveFileName   文件保存名称
     * @param response       输出对象
     * @throws IOException 异常信息
     */
    public static void localToDown(String serverFilePath, String saveFileName, HttpServletResponse response) throws IOException {
        //获取文件的长度
        File file = new File(serverFilePath);
yanzg's avatar
yanzg committed
29 30 31 32
        if (StringHelper.isEmpty(saveFileName)) {
            File parentFile = file.getParentFile();
            saveFileName = StringHelper.trimLeft(file.getAbsolutePath().substring(parentFile.getAbsolutePath().length()), "/");
        }
yanzg's avatar
yanzg committed
33 34
        //设置文件输出类型
        response.setContentType("application/octet-stream");
yanzg's avatar
yanzg committed
35 36 37

        /**文件下载图片乱码处理**/
        String fileName = URLEncoder.encode(saveFileName, "UTF-8");
yanzg's avatar
yanzg committed
38
        // 设置下载的文件名
yanzg's avatar
yanzg committed
39 40
        // 2.其他浏览器attachment;filename*=utf-8'zh_cn
        response.setHeader("Content-Disposition", "attachment; filename*=utf-8'zh_cn'" + fileName);
yanzg's avatar
yanzg committed
41 42
        //设置输出长度
        response.setHeader("Content-Length", String.valueOf(file.length()));
yanzg's avatar
yanzg committed
43
        ServletOutputStream bos = response.getOutputStream();
yanzg's avatar
yanzg committed
44 45 46 47
        // 获取输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(serverFilePath));
        try {
            //输出流
yanzg's avatar
yanzg committed
48 49 50 51 52 53
            byte[] buff = new byte[2048];
            int readSize = 1;
            while (readSize > 0) {
                readSize = bis.read(buff, 0, buff.length);
                if (readSize > 0) {
                    bos.write(buff, 0, readSize);
yanzg's avatar
yanzg committed
54 55 56 57 58 59 60
                }
            }
        } finally {
            bis.close();
        }
    }
}