springboot项目上传图片至项目相对文件夹

springboot项目部署比较容易,打个jar包就可以了,但是这样导致其上传文件的位置不稳定,

网上找了好多例子,都是指定绝对文件夹进行上传的,最后为了项目需求照猫画虎弄了一个

 

  • 先看前端
<img id="upload" src="/img/webuploader.png" title="公司logo" style="width: 80px; height: 80px; margin: 10px 0px;border-radius:50%;" />
                             <h6 style="color:#333;"><font  class="x-form-item star">*</font>(注:图片仅支持jpg、png、gif格式,大小不超过1M)</h6>
                            <input  id="companyLogo" name="companyLogo" style="position: absolute;width:80px; top: 10px; bottom: 50px; left: 45%;right: 0; opacity: 0;" type="file"  enctype="multipart/form-data" accept=".gif, .jpg, .png" onchange="showImg(this)"/>
  • js文件
var formData = new FormData(); 
formData.append('companyLogo', $('#companyLogo')[0].files[0]); //添加图片信息的参数
  • controller接收
public KZResult add(@RequestParam(value = "companyLogo", required = false)MultipartFile companyLogo,
            @RequestParam Map<String,String> map
            )
  • 图片上传工具类
/**
 * SpringBoot上传文件工具类
 * @author lyy
 */
public class FileUtil {

    /** 绝对路径 **/
    private static String absolutePath = "";
    
    /** 静态目录 **/
    private static String staticDir = "static";
    
    /** 文件存放的目录 **/
    private static String fileDir = "/img";

    /** 
     * 上传单个文件
     * 最后文件存放路径为:static/img/11.jpg
     * 文件访问路径为:http://127.0.0.1:8080/img/11.jpg
     * 该方法返回值为:/img/11.jpg
     * @param inputStream 文件流
     * @param path 文件路径,如:image/
     * @param filename 文件名,如:test.jpg
     * @return 成功:上传后的文件访问路径,失败返回:null
     */
    public static String upload(InputStream inputStream, String path, String filename) {
        //第一次会创建文件夹
        createDirIfNotExists();

        String resultPath = fileDir + path + filename; 
        
        //存文件
        File uploadFile = new File(absolutePath, staticDir + resultPath);
        try {
            FileUtils.copyInputStreamToFile(inputStream, uploadFile);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        
        return resultPath;
    }

    /**
     * 创建文件夹路径
     */
    private static void createDirIfNotExists() {
        if (!absolutePath.isEmpty()) {return;}
        
        //获取跟目录
        File file = null;
        try {
            file = new File(ResourceUtils.getURL("classpath:").getPath());
        } catch (FileNotFoundException e) {
            throw new RuntimeException("获取根目录失败,无法创建上传目录!");
        }
        if(!file.exists()) {
            file = new File("");
        }

        absolutePath = file.getAbsolutePath();
        
        File upload = new File(absolutePath, staticDir + fileDir);
        if(!upload.exists()) {
            upload.mkdirs();
        }
    }

    /**
     * 删除文件
     * @param path 文件访问的路径upload开始 如:img/11.jpg
     * @return true 删除成功; false 删除失败
     */
    public static boolean delete(String path) {
        File file = new File(absolutePath, staticDir + path);
        if (file.exists()) {
            return file.delete();
        }
        return false;
    }
}
  • 文件上传service
public class FileSercive {

    public String editMovieInfo(MultipartFile file,String uploadDir,String str) {
        try {
            //上传
            String s=file.getOriginalFilename();  //获取文件名
             String suffix[]=s.split("\\.");    //获取文件后缀名
             String filename =str+"."+suffix[suffix.length-1];  //文件重新命名 
            String path=FileUtil.upload(file.getInputStream(), uploadDir,filename );    //文件上传后的目录
            return path;
        } catch (Exception e){
             return null;
        }
    }
}

 

posted @ 2020-11-04 15:21  过氧化氢  阅读(2682)  评论(0编辑  收藏  举报