Advertisement

java获取下载文件_Java获取HTTP下载文件文件名称

阅读量:

注意中间有段去符号的代码,这段代码只适合Java11默认HttpClient使用。

/**

获取文件名称

下载文件名称:如果不存在返回默认的文件名称

Content-Disposition:attachment;filename=snail.jar?version=1.0.0

Content-Disposition:attachment;filename="snail.jar"

  • @param defaultName 默认文件名称

*/

public String fileName(final String defaultName) {

String fileName = header(CONTENT_DISPOSITION);

if(StringUtils.isEmpty(fileName)) {

return defaultName;

}

final String fileNameLower = fileName.toLowerCase();

if(fileNameLower.contains(FILENAME)) { // 包含文件名称

fileName = UrlUtils.decode(fileName); // URL解码

int index = fileName.indexOf("=");

if(index != -1) {

// 截取名称

fileName = fileName.substring(index + 1);

// 去掉引号

if(fileName.startsWith(""") && fileName.endsWith(""")) {

fileName = fileName.substring(1, fileName.length() - 1);

}

// 去掉参数

index = fileName.indexOf("?");

if(index != -1) {

fileName = fileName.substring(0, index);

}

}

fileName = fileName.trim();

if(StringUtils.isEmpty(fileName)) {

return defaultName;

}

该编码器将按照SystemConfig.CHARSET_GBK进行配置。

// 只是进行URL编码

if(encoder.canEncode(fileName)) {

return fileName;

}

// HttpClient工具汉字ISO-8859-1字符转为char没有去掉符号(& 0xFF)

final char[] chars = fileName.toCharArray();

for (int i = 0; i < chars.length; i++) {

// 去掉符号

chars[i] = (char) (chars[i] & 0x00FF);

}

fileName = new String(chars);

// 处理ISO-8859-1编码

// GBK

最终字符串fileNameGBK被赋值为SystemConfig.CHARSET_ISO_8859_1和SystemConfig.CHARSET_GBK共同作用下的结果。
该过程通过调用StringUtils中的charset方法生成指定字符集的字符串。
具体而言,在参数fileName的基础上分别设置相应的字符集生成新的GBK编码字符串。
通过这一操作可以确保文件编码格式符合GBK标准的要求。

// UTF-8

static final 字符串 fileNameUTF8 = StringUtils::charset(文件名 UTF-8 编码, 系统配置中的 ISO-8859-1 编码设置);

/*

判断依据

GBK转为UTF8基本乱码

转换时可能会出现乱码;但这些字符可能不属于GBK编码体系内的字符;同时也可以被视为GBK编码体系中的某些特定字符。

*/

if(encoder.canEncode(fileNameUTF8)) {

return fileNameUTF8;

}

if(encoder.canEncode(fileNameGBK)) {

return fileNameGBK;

}

// 其他编码直接返回

return fileName;

} else {

return defaultName;

}

}

全部评论 (0)

还没有任何评论哟~