记 Java 根据 User-Agent 返回 Content-Disposition
/**
* 默认编码名称
*/
private static final String DEFAULT_CHARSET_NAME = "UTF-8";
/**
* 通过"User-Agent"和原始文件名获取"Content-Disposition"
*
* @param userAgent "User-Agent"
* @param filename 原始文件名
* @return Content-Disposition
*/
public String getContentDisposition(String userAgent, String filename) {
if (StringUtils.isBlank(filename)) {
return null;
}
return String.format("attachment; %s", getFilenameByUserAgent(userAgent, filename));
}
/**
* 获取url编码后的文件名称
*
* @param name 名称
* @return 编码后的名称
*/
public String getUrlEncodeName(String name) {
name = StringUtils.trimToEmpty(name);
try {
return name.isEmpty() ? name : URLEncoder.encode(name, DEFAULT_CHARSET_NAME).replaceAll("\\+", "%20");
} catch (UnsupportedEncodingException e) {
//ignore
return "";
}
}
/**
* 通过 user-agent 构造content-disposition的 filename 部分
*
* @param userAgent user-agent
* @param filename 文件名称
* @return content-disposition的filename部分
*/
private String getFilenameByUserAgent(String userAgent, String filename) {
//默认chrome
String newFilename = getUrlEncodeName(filename);
String rtn = "filename*=utf-8''" + newFilename;
if (userAgent != null) {
userAgent = userAgent.toLowerCase();
// IE浏览器,只能采用URLEncoder编码
if (userAgent.contains("msie")) {
rtn = "filename=\"" + newFilename + "\"";
}
}
return rtn;
}