本文最后更新于 2024-11-02,文章内容可能已经过时。

思路:使用ip+当前时间戳+三位随机数的组合

  • service层
// 获取系统为文件提供的新文件名
	public String getUploadFilename(HttpServletRequest request, File file) {
		String filename, timeStamp, ip, ext;
		Random r = new Random();
		String random = "" + r.nextInt(10);
		timeStamp = new RenameUtils().getTimeStemp();// 获取当前时间戳
		ip = new RenameUtils().getClientId(request);// 获取访问者的ip
		ip = ip.replace(":", "");
		ip = ip.replace(".", "");
		// 获取三个随机数
		for (int i = 0; i < 2; i++) {
			random += r.nextInt(10);
		}
		// 获取文件后缀
		ext = "." + file.getFileExt();
		// 组合成新的文件名
		filename = ip + timeStamp + random + ext;
		return filename;
	}
  • util层
public class RenameUtils {
	//获取当前时间戳
	public String getTimeStemp() {
		String timeStamp;
		//定义时间戳格式
		SimpleDateFormat time=new SimpleDateFormat("yyyyMMddHHmmssSSS");
		//获取当前时间
		timeStamp=time.format(new Date());
		return timeStamp;
	}
	
	//获取访问者的ip
	public String getClientId(HttpServletRequest request) {
		String ip = request.getHeader("x-forwarded-for"); 
	    if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	        ip = request.getHeader("Proxy-Client-IP"); 
	    } 
	    if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	        ip = request.getHeader("WL-Proxy-Client-IP"); 
	    } 
	    if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
	        ip = request.getRemoteAddr(); 
	    } 
	    return ip; 
	}
	
}