上传图片损坏,上传txt文件中如果存在中文就会乱码
前端代码
<HTML>
<HEAD>
<title>上传文件</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</HEAD>
<body>
<div>
<form action="http://192.168.7.69:8080/biz-orange/DN/doctorService/uploadImage" accept-charset="utf-8" method="post" enctype="multipart/form-data">
<input
type="file" value="上传" name="file" /> <br /> <input type="submit"
value="生成" id="bu" />
</form>
</div>
</body>
</html>
Java 上传文件
@POST
@Path("/uploadImage")
@Produces("multipart/form-data; charset=UTF-8")
public String uploadImage(@Context HttpServletRequest request) {
ResBody< Map<String,String>> resBody = new ResBody<>();
try {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(4194304*10L); //2M
upload.setHeaderEncoding("UTF-8");
//创建文件存储临时目录
List<FileItem> items = upload.parseRequest(request);
if(items != null && !items.isEmpty()){
for (FileItem fileItem : items) {
System.out.println(fileItem);
System.out.println(fileItem.getFieldName());
String filename=fileItem.getName();
String filepath=tempDir+File.separator+filename;
System.out.println("文件保存路径为:"+filepath);
File file=new File(filepath);
// fileItem.write(file);
InputStream inputSteam= fileItem.getInputStream();
System.out.println(inputSteam.available());
FileOutputStream out = new FileOutputStream(filepath);
//创建一个缓冲区
byte buffer[] = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = 0;
//循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while((len=inputSteam.read(buffer))>0){
//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
out.write(buffer, 0, len);
}
//关闭输入流
inputSteam.close();
out.close();
System.out.println("文件:"+filename+"上传成功!");
//保存至fastdfs
resBody.setRetCode(ResponseCode.REQUEST_SUCCESS);
resBody.setRetDesc("SUCCESS");
}
}
System.out.println("上传文件成功!");
} catch (Exception e) {
e.printStackTrace();
resBody.setRetCode(ResponseCode.DEFALUT_ERROR);
resBody.setRetDesc(ResponseCode.CODE_RET_DESC);
logger.error(e);
}
return JSONObject.toJSONString(resBody);
}