文件上传重名与乱码问题
前言
在javv学习javaweb中 上传文件发生的乱码以及重名覆盖问题。
一、文件乱码问题
在执行上传请求时,设置请求的字符集即可解决
req.setCharacterEncoding("utf8");
二、文件重名问题
在上传文件时,如果上传的文件已经存在同名的文件,那么就会覆盖原文件。
1.上传操作文件重名问题分析
每一个客户端都可以进行文件上传操作,那么当我们上传的文件过多,一定会出现同名的文件,那么在服务器端只能保存一个,对于这个问题,我们在上传文件时,就需要考虑文件重名问题
2.上传操作文件重名解决方案
一般情况下,对于上传文件,为了保证不重名,会给文件起一个随机名.:
有两种方案:
- 一种方案用UUID
- 一种方案是使用毫秒值
//设置请求的字符集
req.setCharacterEncoding("utf8");
//获取上传到服务器的临时文件对象
Part file = req.getPart("file");
//获取上传的文件名
String fileName = file.getSubmittedFileName();
//获取登录用户的用户名
String loginName= SessionUtils.getLoginName(req);
//获取当前日期
String dateFormat = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
// 设置用户下的日期文件夹路径
String dateDirPath= "C:/Users/admin/Desktop/upload/" +loginName +"/" + dateFormat;
//获取dateDirPath路径的文件夹
File dateDir=new File(dateDirPath);
if(!dateDir.exists()) {
dateDir.mkdirs();
}
//获取UUID
String NewFileName = UUIDUtils.getUUID();
String suffix = null;
System.out.println("获取后缀名");
if (fileName != null && fileName.length() > 0){
suffix = fileName.substring(fileName.lastIndexOf("."));
}
StringBuilder stringBuilder = new StringBuilder(NewFileName);
//构建上传的文件名
String uploadfilepathname = stringBuilder.append(suffix).toString();
//构建I流
InputStream inputStream = file.getInputStream();
//构建O流
FileOutputStream fileOutputStream = new FileOutputStream(dateDir+"/"+uploadfilepathname);
IOUtils.readeAndWrite(inputStream, fileOutputStream);
resp.sendRedirect("/index");
最后效果为:
总结
个人对于上传文件时的重名与乱码的一些尝试