From 05eba770a2533a173da4dfe479dc9e8044b1c768 Mon Sep 17 00:00:00 2001 From: duhuafei Date: Wed, 26 Jun 2019 14:39:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9ERFC=205987=E6=A0=87=E5=87=86?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8Dheader:content-disposition=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../easypoi/util/WebFilenameUtils.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 easypoi-base/src/main/java/cn/afterturn/easypoi/util/WebFilenameUtils.java diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/util/WebFilenameUtils.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/WebFilenameUtils.java new file mode 100644 index 0000000..d447617 --- /dev/null +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/util/WebFilenameUtils.java @@ -0,0 +1,37 @@ +package cn.afterturn.easypoi.util; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.UnsupportedEncodingException; + +/**根据RFC 5987规范生成disposition值, 解决浏览器兼容以及中文乱码问题 + * @author halfdo + * @date 6/25/2019 + */ +public class WebFilenameUtils { + + private static final Logger LOGGER = LoggerFactory.getLogger(WebFilenameUtils.class); + + private static final String DISPOSITION_FORMAT = "attachment; filename=\"%s\"; filename*=utf-8''%s"; + + /** + * 未编码文件名转Content-Disposition值 + * + * @param filename 未编码的文件名(包含文件后缀) + * @return Content-Disposition值 + */ + public static String disposition(String filename) { + String codedFilename = filename; + try { + if (StringUtils.isNotBlank(filename)) { + codedFilename = java.net.URLEncoder.encode(filename, "UTF-8"); + } + } catch (UnsupportedEncodingException e) { + LOGGER.error("不支持的编码:", e); + } + return String.format(DISPOSITION_FORMAT, codedFilename, codedFilename); + + } +}