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; } } }
小白技术分享