燕山石化溯源三维电子沙盘-【后端】-服务
11
13693261870
2023-08-09 8330c43522c9b22a39b07f249307cdf30dc40075
11
已添加1个文件
168 ■■■■■ 文件已修改
src/main/java/com/yssh/utils/WebUtils.java 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yssh/utils/WebUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,168 @@
package com.yssh.utils;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.net.URLEncoder;
import java.util.Date;
/**
 * Web工具类
 * @author WWW
 * @date 2023-08-09
 */
public class WebUtils {
    /**
     * å­—符点
     */
    public final static String POINT = ".";
    /**
     * ä¸‹è½½æ–‡ä»¶
     *
     * @param file     æ–‡ä»¶
     * @param fileName æ–‡ä»¶å
     * @param res      å“åº”
     * @throws Exception å¼‚常
     */
    public static void download(String file, String fileName, boolean inline, HttpServletResponse res) throws Exception {
        if (StringUtils.isEmpty(fileName)) {
            fileName = DateUtils.parseDateToStr(DateUtils.YYYYMMDDHHMMSS, new Date());
        }
        fileName = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20");
        String dispose = inline ? "inline" : "attachment";
        // è®¾ç½®å“åº”头中文件的下载方式为附件方式,以及设置文件名
        res.setHeader("Content-Disposition", dispose + "; filename*=UTF-8''" + fileName);
        // è®¾ç½®å“åº”头的编码格式为 UTF-8
        res.setCharacterEncoding("UTF-8");
        // é€šè¿‡response对象设置响应数据格式(如:"text/plain; charset=utf-8")
        String ext = getExtension(file);
        String mime = getMime(ext);
        res.setContentType(mime);
        // é€šè¿‡response对象,获取到输出流
        ServletOutputStream outputStream = res.getOutputStream();
        // å®šä¹‰è¾“入流,通过输入流读取文件内容
        FileInputStream fileInputStream = new FileInputStream(file);
        int len = 0;
        byte[] bytes = new byte[1024];
        while ((len = fileInputStream.read(bytes)) != -1) {
            // é€šè¿‡è¾“入流读取文件数据,然后通过上述的输出流写回浏览器
            outputStream.write(bytes, 0, len);
            outputStream.flush();
        }
        // å…³é—­èµ„源
        fileInputStream.close();
        outputStream.close();
    }
    /**
     * èŽ·å–æ–‡ä»¶æ‰©å±•å
     */
    public static String getExtension(String fileName) {
        if (StringUtils.isEmpty(fileName)) {
            return "";
        }
        int idx = fileName.lastIndexOf(POINT);
        if (idx == -1) {
            return "";
        }
        return fileName.substring(idx).toLowerCase();
    }
    /**
     * èŽ·å–å¤šç”¨é€”äº’è”ç½‘é‚®ä»¶æ‰©å±•ç±»åž‹
     *
     * @param ext æ–‡ä»¶æ‰©å±•名
     * @return MIME
     */
    public static String getMime(String ext) {
        switch (ext) {
            // å›¾ç‰‡
            case ".tif":
            case ".tiff":
                return "image/tiff";
            case ".img":
                return "application/x-img";
            case ".gif":
                return "image/gif";
            case ".jpg":
            case ".jpeg":
                return "image/jpeg";
            case ".png":
                return "image/png";
            // éŸ³/视频
            case ".mp3":
                return "audio/mp3";
            case ".mp4":
                return "video/mpeg4";
            case ".avi":
                return "video/avi";
            case ".mpg":
            case ".mpeg":
                return "video/mpg";
            case ".wav":
                return "audio/wav";
            case ".wma":
                return "audio/x-ms-wma";
            case ".swf":
                return "application/x-shockwave-flash";
            case ".wmv":
                return "video/x-ms-wmv";
            case ".rm":
                return "application/vnd.rn-realmedia";
            case ".rmvb":
                return "application/vnd.rn-realmedia-vbr";
            // ç½‘页
            case ".js":
                return "application/x-javascript";
            case ".css":
                return "text/css";
            case ".asp":
                return "text/asp";
            case ".mht":
                return "message/rfc822";
            case ".jsp":
            case ".htm":
            case ".html":
            case ".xhtml":
                return "text/html";
            case ".xml":
            case ".svg":
                return "text/xml";
            // æ–‡ä»¶
            case ".txt":
                return "text/plain";
            case ".dbf":
                return "application/x-dbf";
            case ".mdb":
                return "application/msaccess";
            case ".pdf":
                return "application/pdf";
            case ".ppt":
            case ".pptx":
                return "application/x-ppt";
            case ".doc":
            case ".docx":
                return "application/msword";
            case ".xls":
            case ".xlsx":
                return "application/vnd.ms-excel";
            case ".dgn":
                return "application/x-dgn";
            case ".dwg":
                return "application/x-dwg";
            case ".ext":
                return "application/x-msdownload";
            // é»˜è®¤
            default:
                return "application/octet-stream";
        }
    }
}