|
|
@@ -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); |
|
|
|
|
|
|
|
} |
|
|
|
} |