OSS文件上传乱码
原代码是直接调用了putObject()方法(如下),并没有设置文件类型,这种情况下,阿里云会根据文件类型默认将txt文件的ContentType为text/plain,而这是导致其在浏览器出现乱码的原因。
PutObjectResult result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream());
目前我的解决方法是,在调用putObject()方法前,自定义设置文件类型为text/plain;charset=utf-8 或 application/json:
PutObjectResult result=null;
/**
* 阿里云txt文件上传后,预览/下载会出现乱码,
* 原因是:阿里云根据文件类型默认设置的ContentType为text/plain
* 解决方法:上传前判断文件类型,如果是txt文件,则自定义设置ContentType为text/plain;charset=utf-8 或 application/json
*/
//获取文件类型
String type = FileTypeFilter.getType(file);
if ("txt".equals(type)){
// 创建上传文件的Metadata。
ObjectMetadata objectMetadata = new ObjectMetadata();
// 指定上传的内容类型(下面两种都可以)
objectMetadata.setContentType("text/plain;charset=utf-8");
// objectMetadata.setContentType("application/json");
result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream(),objectMetadata);
}else {
result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream());
}
这种情况就不会出现了乱码问题了!
本地服务器乱码问题
和OSS大同小异,将txt文件的编码指定一下。
得说一下,可能是服务器的设置问题(具体还不清楚),我目前的解决方式是将txt文件以UTF-8读取,再以GBK写入,最后上传。
/** 处理:判断文件类型为txt时,将编码转成GBK 修改人:修改时间:2024/7/25 15:42 */
boolean b = orgName.endsWith("txt");
BufferedReader bufferedReader =null;
BufferedWriter bufferedWriter =null;
if (b){
InputStreamReader reader = new InputStreamReader(input, "UTF-8");
bufferedReader = new BufferedReader(reader);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(out, "GBK"));
String line;
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line+ "\r\n");
}
}
IOUtils.copy(input, out);
if (b){
bufferedWriter.close();
bufferedReader.close();
}
out.close();
目前先这样记录啦!!!!