SpringBoot 文件或图片上传与下载

  • A+
所属分类:Web前端
摘要

  推荐大神:狂神说Java 参考资料:狂神说SpringMVC:文件上传下载 

  • 导入依赖(pom.xml)

     <!-- 上传下载需要设计到的jar包 -->         <dependency>             <groupId>commons-io</groupId>             <artifactId>commons-io</artifactId>             <version>2.6</version>         </dependency>         <dependency>             <groupId>commons-fileupload</groupId>             <artifactId>commons-fileupload</artifactId>             <version>1.3.3</version>         </dependency>         <!--servlet-api导入高版本的-->         <dependency>             <groupId>javax.servlet</groupId>             <artifactId>javax.servlet-api</artifactId>             <version>4.0.1</version>         </dependency>         <!-- 图片处理类 -->         <dependency>             <groupId>net.coobird</groupId>             <artifactId>thumbnailator</artifactId>             <version>0.4.8</version>         </dependency>

  • 全局配置 application.properties

# 上传文件大小 spring.servlet.multipart.max-file-size=5MB spring.servlet.multipart.max-request-size=5MB

  • 创建 WebMvcConfig 配置类  静态资源映射

@Configuration public class WebMvcConfig implements WebMvcConfigurer {      @Override     public void addResourceHandlers(ResourceHandlerRegistry registry) {         ApplicationHome h = new ApplicationHome(getClass());         File jarF = h.getSource();         String dirPath = jarF.getParentFile().toString()+"/upload/";          String os = System.getProperty("os.name");          if (os.toLowerCase().startsWith("win")) {  //如果是Windows系统             registry.addResourceHandler("/upload/**").addResourceLocations("file:"+dirPath);         } else {             registry.addResourceHandler("/upload/**").addResourceLocations("file:"+dirPath);         }     }  }

  • 文件或图片上传

  • 控制层
// 上传文件     @ResponseBody     @RequestMapping("/upload")     public String fileUpload(@RequestParam("files") MultipartFile files) throws IOException { //        // win系统 上传路径保存设置 //        // 获取项目路径 //        File projectPath = new File(ResourceUtils.getURL("classpath:").getPath()); //        // 绝对路径=项目路径+自定义路径 //        File pathFile = new File(projectPath.getAbsolutePath(), "static/upload/"); //        if (!pathFile.exists()) { //            pathFile.mkdirs(); //        } //        //上传文件地址 //        UUID uuid = UUID.randomUUID(); //        File serverFile = new File(pathFile, uuid + "_" + files.getOriginalFilename()); //        files.transferTo(serverFile); // //        String imgPath = ("/upload/" + uuid + "_" + files.getOriginalFilename()).replace("\", "/"); // //        return imgPath;          // Linux服务器  上传路径保存设置         // 项目路径  /home/www/         File pathFile = new File("/home/www/upload/");         if (!pathFile.exists()) {             pathFile.mkdirs();         }         //上传文件地址         UUID uuid = UUID.randomUUID();         File serverFile = new File(pathFile, uuid + "_" + files.getOriginalFilename());         files.transferTo(serverFile);          String imgPath = ("/upload/" + uuid + "_" + files.getOriginalFilename()).replace("\", "/");          return imgPath;     }

  • HTML页面    Ajax 无刷新上传 

<form action="" class="layui-form" enctype="multipart/form-data" method="post">   <input type="hidden" name="blogImg" id="imgPath" value="">   <div class="form-group">     <label>图片上传</label>     <input type='file' style='margin: 5px;' name='files' required><br>     <button type="button" class="layui-btn" id="img_upload">上传图片</button>   </div>   <input type="submit"> </form>

  • JS

//普通图片上传         $('#img_upload').click(function () {             var formData = new FormData();             //获取选择的文件             $.each($('input[name="files"]'),function (index,item) {                 formData.append("files",item.files[0])             });              //发送异步请求             $.ajax({                 method:'post',                 url: '[[@{/user/upload}]]', // 文件上传接口                 data:formData,                 processData: false,                 contentType:false,                 success:function (data) {                     //成功返回触发的方法                     $('#imgPath').val(data);                     alert("上传成功");                 },                 //请求失败触发的方法                 error:function () {                     alert("上传失败");                 }             });         });

  • 文件或图片下载

  • 控制层
@RequestMapping(value="/download") public String downloads(HttpServletResponse response ,HttpServletRequest request) throws Exception{    //要下载的图片地址    String  path = request.getServletContext().getRealPath("/upload");    String  fileName = "基础语法.jpg";     //1、设置response 响应头    response.reset(); //设置页面不缓存,清空buffer    response.setCharacterEncoding("UTF-8"); //字符编码    response.setContentType("multipart/form-data"); //二进制传输数据    //设置响应头    response.setHeader("Content-Disposition",            "attachment;fileName="+URLEncoder.encode(fileName, "UTF-8"));     File file = new File(path,fileName);    //2、 读取文件--输入流    InputStream input=new FileInputStream(file);    //3、 写出文件--输出流    OutputStream out = response.getOutputStream();     byte[] buff =new byte[1024];    int index=0;    //4、执行 写出操作    while((index= input.read(buff))!= -1){        out.write(buff, 0, index);        out.flush();   }    out.close();    input.close();    return null; }

  • HTML页面  

<a href="/download">点击下载</a>

  • SpringBoot 文件或图片上传与下载就可以了 

 

 

推荐大神:狂神说Java

 

参考资料:狂神说SpringMVC:文件上传下载