springboot文件上传方法详解

2023-03-04 13:34:28 浏览数 (1)

代码语言:javascript复制
package priv.kuki.admin.service.impl;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import priv.kuki.utils.R;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.util.UUID;


@Service
@Slf4j
public class AdminProductServiceImpl implements AdminProductService {
    
    @Resource
    private HttpSession session;

    @Override
    public R upload(MultipartFile file) {

        // 1.判断传过来的文件是否为空,若为空则报错退出!
        if (file.isEmpty()) {
            return R.fail("文件为空!");
        }

        // 2.获取完整文件名(包含拓展名)
        String originalFilename = file.getOriginalFilename();

        // 3.获取文件后缀。“.”后边的就是后缀,不包含".",但是后边设置文件名还要添加"."太麻烦
        // String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")   1);
        // 3.获取文件后缀。包含"."
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));

        // 4.设置新的文件名,通过UUID或时间戳生成文件名,再拼接上后缀名
        String fileName = UUID.randomUUID()   suffix;

        // 5.获取服务器中保存文件的目录路径,比如images目录的路径
        // ServletContext servletContext = session.getServletContext();
        // String filePath = servletContext.getRealPath("images");
        // 也可以保存在自己电脑指定路径下,注意是"\"双斜杠,一个是路径一个是Java转义符
        String filePath = "D:\Pictures\";

        // 6.在目录中新建文件
        // File newFile = new File(filePath   fileName); //会多一个同名文件夹
        File newFile = new File(filePath );
        if(!newFile.exists()){
            // 若路径不存在在创建路径
            newFile.mkdir();
        }

        // 7.最终文件路径   分隔符File.pathSeparatorChar    文件名
        String finalPath = filePath   File.pathSeparatorChar   fileName;

        try {
            // 8.文件上传,new File()上传路径,上传可能会出现异常,比如存储空间不够...
            file.transferTo(new File(finalPath));
        }catch (Exception e){

            e.printStackTrace();
            return R.fail("文件上传失败!",e);
        }

        // 返回文件存储路径给前端
        return R.ok("上传成功!",finalPath);

    }
}

0 人点赞