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";
|
}
|
}
|
}
|