OSS链接在浏览器中打开,某些文件会直接打开不会下载,如何强制下载
1、获取签名地址,并将参数进行替换 IE 及 Chrome 都可以兼容此方法。文件名都不会有中文乱码。
/**
* OSS 获取强制下载地址URL
* 如有有问题请先查看是有存在字符URLEncoder编码与OSS编码不一致
*
* @param key
* @param name
* @return
*/
private String getOSSDownloadUrl(String key, String name) {
if (ossTemplate.isExistKey(key)) {
try {
String nameEncoder = encoder(name);
String attachment = new StringBuffer("?response-content-disposition=attachment;filename=").append(nameEncoder).append(";filename*=UTF-8''").append(nameEncoder).toString();
String attachmentEncoder = encoder(attachment);
String ossResultUrl = ossTemplate.getAccessUrlByPrivate(new StringBuffer(key).append(attachment).toString(), 3600 * 4);
String replaceOssResultUrl = ossResultUrl.replace(attachmentEncoder + "?", attachment + "&");
return replaceOssResultUrl.replaceAll(nameEncoder, encoder(nameEncoder));
} catch (UnsupportedEncodingException e) {
log.error("编码错误", e);
}
}
return null;
}
/**
* encodeURL
* 解决URLEncoder 编码规则不匹配方法
*
* @param s
* @return
*/
private String encoder(String s) throws UnsupportedEncodingException {
String encoder = URLEncoder.encode(s, "UTF-8");
encoder = encoder.replaceAll("\\+", "%20");
encoder = encoder.replaceAll("\\*", "%2A");
return encoder;
}
2、上传时直接设置 http头,filename 要进行编码,否则在IE中下载中文名称会乱码