/**
* ass we can!
* created by shing
* 2019-03-29 23:13
*/
springboot后端接受图片到本地,还有删除方法。
不多bb,直接上代码,其实就是一个工具类,直接复制就可以使用
接受图片,读取,唯一命名,写入图片,存到本地,删除图片
pc.java
//import的内容,直接ALt+Enter吧
@CrossOrigin
public class picUtil {
//这是本地存入的格式,上传到服务器的话,格式类似于,"/root/images/pc/"
private static String UPLOAD_FOLDER = "D:/images/pc/";
// private Logger logger = LoggerFactory.getLogger(picUtil.class);打日志用的
//Thread.currentThread().getContextClassLoader().getResource("").getPath();(获取当前的绝对路径的方法,这里不用,得到的是这样的东西:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/)
public static String singleFileUpload(MultipartFile pc1 ) throws IOException {
// logger.debug("传入的文件参数:{}", JSON.toJSONString(file, true));
if (Objects.isNull(pc1) || pc1.isEmpty()) {//判断非空
// logger.error("文件为空");
return "文件为空,请重新上传";
}
try {
byte[] bytes = pc1.getBytes();
//要存入本地的地址放到path里面
Path path = Paths.get( UPLOAD_FOLDER+"/");
//如果没有files文件夹,则创建
if (!Files.isWritable(path)) {
Files.createDirectories(path);
}
String extension = getFileExtension(pc1); //获取文件后缀
UUID uuid = UUID.randomUUID(); //这里调用了UUID,得到全宇宙唯一的命名
String str = uuid.toString(); // 真正的UUID打印出来是这样的:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)
//所以我们可以去掉去掉"-"符号
String picname = str.substring(0, 8) + str.substring(9, 13) + str.substring(14, 18) + str.substring(19, 23) + str.substring(24);
String relativeAddr = pcname + extension; //唯一的名字接上后缀
Thumbnails.of(pc1.getInputStream()).size(200, 200) //写入
.outputQuality(0.8f).toFile(path+"/"+relativeAddr);
//logger.debug("文件写入成功...");
return Paths.get(path + "/" + relativeAddr).toString();
} catch (IOException e) {
e.printStackTrace();
return "后端异常...";
}
}
//写一个删除方法,你们可以看情况修改
public static String deFile(String path){
String resultInfo = null;
Map<String, Object> modelMap = new HashMap<String, Object>();
// String sb =area.getAreaName();;
// sb.replace("/","\\");
//String sb1 = "F:\\photos\\蛇皮玩意儿\\123\\瞎把.jpg";
File file = new File(path);
if (file.exists()) {
if (file.delete()) {
resultInfo = "1-删除成功";
} else {
resultInfo = "0-删除失败";
}
} else {
resultInfo = "文件不存在!";
}
return resultInfo;
}
public static boolean deleteDirectory(String dirPath) {// 删除目录(文件夹)以及目录下的文件
// 如果sPath不以文件分隔符结尾,自动添加文件分隔符
boolean flag=false;
String a = null;
if (!dirPath.endsWith(File.separator)) {
dirPath = dirPath + File.separator;
System.out.println("没有后缀符号'/'");
}
File dirFile = new File(dirPath);
// 如果dir对应的文件不存在,或者不是一个目录,则退出
if (!dirFile.exists() || !dirFile.isDirectory()) {
System.out.println("不是目录");
return false;
}
flag = true;
File[] files = dirFile.listFiles();// 获得传入路径下的所有文件
for (int i = 0; i < files.length; i++) {// 循环遍历删除文件夹下的所有文件(包括子目录)
if (files[i].isFile()) {// 删除子文件
a= deFile(files[i].getAbsolutePath());
System.out.println(files[i].getAbsolutePath() + " 目录文件删除成功");
if (!flag)
break;// 如果删除失败,则跳出
} else {// 运用递归,删除子目录
flag = deleteDirectory(files[i].getAbsolutePath());
if (!flag)
break;// 如果删除失败,则跳出
}
}
if (!flag)
return false;
if (dirFile.delete()) {// 删除当前目录
return true;
} else {
return false;
}
}
private static String getFileExtension(MultipartFile File) {
String originalFileName = File.getOriginalFilename();
return originalFileName.substring(originalFileName.lastIndexOf("."));
}
可以简单写一个html实验一下
<html>
<form enctype='multipart/form-data' action="http://localhost:8080/***"(自己写个controller吧) method="post">
<input type="file" name="pc1">
//<input type="file" name='pc2'>
<input type="submit">
</form >
</html>
contrller自己随便写吧
#效果图