文件上传后 自动 生成 时间戳+随机码
但是 我的后台需要上传的图片有重复的 不想让他重新生成新的图片新的名字
控制器部分代码
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; // 图片上传
MultipartFile left_img = multipartRequest.getFile("left_img");// 上传左图原文件
MultipartFile right_img = multipartRequest.getFile("right_img");// 上传右图原文件不仅仅是名字
FileUtil fileUtil = new FileUtil();
String fileRoot = request.getSession().getServletContext().getRealPath("upload/handAcupoint");
System.out.println("fileRoot:" + fileRoot);
String type = multipartRequest.getParameter("type");
String id = multipartRequest.getParameter("id1");
String code = multipartRequest.getParameter("num");
String name = multipartRequest.getParameter("name");
String en_name = multipartRequest.getParameter("en_name");
String pinyin = multipartRequest.getParameter("pinyin");
String location = multipartRequest.getParameter("location");
String left_x = multipartRequest.getParameter("left_x");
String left_y = multipartRequest.getParameter("left_y");
String right_x = multipartRequest.getParameter("right_x");
String right_y = multipartRequest.getParameter("right_y");
String zhuzhi = multipartRequest.getParameter("zhuzhi");
String leftFileName = null;
String rightFileName = null;
String yleftName = null; // 原来左图片名字
String yrightName = null;// 原来右图片名字
String res = null;
int code1 = Integer.parseInt(code);
int right_x1 = Integer.parseInt("0" + right_x);
int right_y1 = Integer.parseInt("0" + right_y);
int left_x1 = Integer.parseInt("0" + left_x);
int left_y1 = Integer.parseInt("0" + left_y);
if (type.equals("0")) {// 添加手诊穴位信息
leftFileName = fileUtil.saveImg(left_img, fileRoot, yleftName); // 左图
rightFileName = fileUtil.saveImg(right_img, fileRoot, yrightName); // 右图
int num = handDiagnosisService.saveHandAcupoint(code1, name, en_name, pinyin, location, leftFileName,
rightFileName, left_x1, left_y1, right_x1, right_y1, zhuzhi);
if (num != 0) {
res = "1001";// 添加成功
} else {
res = "1002";// 添加失败
}
OutputUtil.outPutString(response, res);
}
上传类代码
public class FileUtil {
/**
* 上传图片
* @param imgFile 图片文件
* @param fileRoot 目标地址
* @param fileName 图片名称
* @return
* @throws IOException
* @throws IllegalStateException
*/
public String saveImg(MultipartFile imgFile,String fileRoot,String fileName) throws IllegalStateException, IOException{
if(imgFile == null){
return null;
}
File src = new File(fileRoot);
if (!src.exists()) {
src.mkdirs();
}
fileName = fileName==null?System.currentTimeMillis()+ new Random().nextInt(100000)+".jpg":fileName;
/* String fileName = System.currentTimeMillis()+ new Random().nextInt(100000)+".jpg"; //图片名
*/ File newFile = new File(src, fileName);
imgFile.transferTo(newFile);
return fileName;
}
}
import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;
public class FileDigest {
/**
* 获取单个文件的MD5值!
* @param file
* @return
*/
public static String getFileMD5(File file) {
if (!file.isFile()){
return null;
}
MessageDigest digest = null;
FileInputStream in=null;
byte buffer[] = new byte[1024];
int len;
try {
digest = MessageDigest.getInstance("MD5");
in = new FileInputStream(file);
while ((len = in.read(buffer, 0, 1024)) != -1) {
digest.update(buffer, 0, len);
}
in.close();
} catch (Exception e) {
e.printStackTrace();
return null;
}
BigInteger bigInt = new BigInteger(1, digest.digest());
return bigInt.toString(16);
}
/**
* 获取文件夹中文件的MD5值
* @param file
* @param listChild ;true递归子目录中的文件
* @return
*/
public static Map<String, String> getDirMD5(File file,boolean listChild) {
if(!file.isDirectory()){
return null;
}
//<filepath,md5>
Map<String, String> map=new HashMap<String, String>();
String md5;
File files[]=file.listFiles();
for(int i=0;i<files.length;i++){
File f=files[i];
if(f.isDirectory()&&listChild){
map.putAll(getDirMD5(f, listChild));
} else {
md5=getFileMD5(f);
if(md5!=null){
map.put(f.getPath(), md5);
}
}
}
return map;
}
public static void main(String[] args) {
File file1 = new File("a.txt");
File file2 = new File("b.txt");
System.out.println(getFileMD5(file1).equals(getFileMD5(file2)));
}
}
在服务器上的文件名字不重要,只要下载的时候设置下Content-Disposition为attachment;filename=你的文件名
用户就会得到原始文件的下载。
http://blog.csdn.net/u010627547/article/details/43986925
fileutil 里面 该如何做一下修改
楼主是想一张图片不让多次上传把
1、计算文件的 MD5 值,文件的MD5值可以代表一个文件的唯一标示,如果两个文件的MD5值相等,可以认为文件是一致的;
2、至于怎么计算文件的MD5值,网络上有很多,这里原谅我不能贴别人的东西上来。
同一张照片 重复上传 服务器上面不会增加重复
楼上给出的思路可以,计算后的值持久化到数据库,再次上传的时候,进行校验