SpringBoot图片文件上传

上传图片

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

猜你喜欢

转载自blog.csdn.net/m0_46636892/article/details/125568893
今日推荐