上传图片
1.简单的配置
#配置properties文件
#配置端口号
server.port=8088
#Spring配置
#单次总文件大小
spring.servlet.multipart.max-request-size=10MB
#单个文件最大大小
spring.servlet.multipart.max-file-size=2MB
file.uploadPath= E:/photo/
file.visitPath= http://localhost:8088/image/
#配置虚拟路径
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Value("${file.uploadPath}")
private String uploadPath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//String projectUpPath= GetPath.getProjectUpPath();
String path="file:"+projectUpPath;
//文件磁盘图片url 映射
//配置server虚拟路径,handler为前台访问的目录,locations为files相对应的本地路径
registry.addResourceHandler("/image/**").addResourceLocations(path);
}
}
获取当前项目所在路径的工具类
public class GetPath {
// 获取当前项目所在文件夹的上一级目录
public static String getProjectUpPath(){
String s1=System.getProperty("user.dir");
String s2="\\\\";
String[] ss=s1.split(s2);
int count=ss.length;
String path="";
for (int i=1;i<count;++i){
path=path+ss[i-1]+"/";
}
return path;
}
}
2.测试文件能否被接收
1.controller
@Controller
public class UploadController {
@Resource
private UploadService uploadService;
@RequestMapping(value = "/uploadPhoto",method = RequestMethod.POST)
@ResponseBody
public String uploadPhoto(MultipartFile photo){
return uploadService.uploadPhoto(photo);
}
}
2.service
public interface UploadService {
/**
* 上传单张图片
*/
public String uploadPhoto(MultipartFile photo);
}
3.serviceImpl
@Service
public class UploadServiceImpl implements UploadService {
@Override
public String uploadPhoto(MultipartFile photo) {
String originalFilename = photo.getOriginalFilename();
System.out.println("上传图片的名称是:"+originalFilename);
return "success!";
}
}
3.获取图片的信息并将其存储起来
@Service
public class UploadServiceImpl implements UploadService {
/**
* 从properties中获取文件存储路径和返回路径前缀
*/
@Value("${file.uploadPath}")
private String uploadPath;
@Value("${file.visitPath}")
private String visitPath;
@Override
public String uploadPhoto(MultipartFile photo) {
/**
* 获取图片的属性
*/
//获取图片名称
String originalFilename = photo.getOriginalFilename();
//获取图片大小(单位是字节,/1024就是kb)
Long size=photo.getSize();
//截取图片的后缀 lastIndexOf最后出现.的位置(获取文件后缀名)
String imgSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));
System.out.println("上传图片的名称是:"+originalFilename);
System.out.println("上传图片的大小是:"+size+"B");
System.out.println("上传图片的后缀是:"+imgSuffix);
/**
* 图片的存储
*/
//创建存储的路径
String sPath="myPhoto/image/";
File file=new File(uploadPath,sPath); //拼接除文件名称外的完整路径
System.out.println(file);
//判断存储路径是否存在,不存在就创建
if(!file.exists()) file.mkdirs(); // 如果目录不存在,则递归创建
//防止上传的文件名重复,我们一般采用uuid的方式生成新的文件名进行文件的存储
String newFileName = UUID.randomUUID().toString().replace("-","")+imgSuffix;
System.out.println(newFileName);
//指定文件上传后的完整路径(包括文件名称)
File myPhoto=new File(file,newFileName);
System.out.println(myPhoto);
//将我们传进来的photo文件上传到我们刚刚创建的文件中,这里必须处理异常
try{
photo.transferTo(myPhoto);
}catch (IOException e){
e.printStackTrace();
return "文件上传失败!";
}
return "success!";
}
}
4.存储图片后返回可以访问图片的url路径
@Service
public class UploadServiceImpl implements UploadService {
/**
* 从properties中获取文件存储路径和返回路径前缀
*/
@Value("${file.uploadPath}")
private String uploadPath;
@Value("${file.visitPath}")
private String visitPath;
@Override
public String uploadPhoto(MultipartFile photo) {
/**
* 获取图片的属性
*/
//获取图片名称
String originalFilename = photo.getOriginalFilename();
//获取图片大小(单位是字节,/1024就是kb)
Long size=photo.getSize();
//截取图片的后缀 lastIndexOf最后出现.的位置(获取文件后缀名)
String imgSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));
System.out.println("上传图片的名称是:"+originalFilename);
System.out.println("上传图片的大小是:"+size+"B");
System.out.println("上传图片的后缀是:"+imgSuffix);
/**
* 图片的存储
*/
//创建存储的路径
String sPath="myPhoto/image/";
File file=new File(uploadPath,sPath); //拼接除文件名称外的完整路径
System.out.println(file);
//判断存储路径是否存在,不存在就创建
if(!file.exists()) file.mkdirs(); // 如果目录不存在,则递归创建
//防止上传的文件名重复,我们一般采用uuid的方式生成新的文件名进行文件的存储
String newFileName = UUID.randomUUID().toString().replace("-","")+imgSuffix;
System.out.println(newFileName);
//指定文件上传后的完整路径(包括文件名称)
File myPhoto=new File(file,newFileName);
System.out.println(myPhoto);
//将我们传进来的photo文件上传到我们刚刚创建的文件中,这里必须处理异常
try{
photo.transferTo(myPhoto);
}catch (IOException e){
e.printStackTrace();
return "文件上传失败!";
}
//拼接照片可访问路径
String newPath=visitPath+sPath+newFileName;
System.out.println(newPath);
return newPath;
}
}
返回图片的访问路径,上传的图片通过重写WebMvcConfig的addResourceHandlers方法来设置本地图片和项目访问映射路径,然后通过拼接字符串的形式拼接出可以访问图片的url路径
多张图片的上传
上传方法
多张图片上传时可以采用List<MultipartFile> 或者MultipartFile[] 来接收文件,然后对文件逐个存储
File类的使用
java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作
创建file对象
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
常用方法
public String getAbsolutePath() : 返回此File的绝对路径名字符串。
public String getPath() : 将此File转换为路径名字符串。
public String getName() : 返回由此File表示的文件或目录的名称。
public long length() : 返回由此File表示的文件的长度。
常用判断方法
public boolean exists() : 此File表示的文件或目录是否实际存在。
public boolean isDirectory() : 此File表示的是否为目录。
public boolean isFile() : 此File表示的是否为文件。
创建删除功能方法
public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete() :删除由此File表示的文件或目录。
public boolean mkdir() :创建由此File表示的目录。
public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。
目录的遍历
public String[] list() : 返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles() : 返回一个File数组,表示该File目录中的所有的子文件或目录。
参考文章
https://blog.csdn.net/weixin_51993595/article/details/121737305
https://blog.csdn.net/m0_52133525/article/details/123395196
https://blog.csdn.net/weixin_45393094/article/details/112056436
https://blog.csdn.net/qq_41604890/article/details/114553632?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165656831316781667858345%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165656831316781667858345&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-20-114553632-null-null.142v26control,157v15new_3&utm_term=SpringBoot%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87&spm=1018.2226.3001.4187
|