软件编程
位置:首页>> 软件编程>> java编程>> SpringBoot实现文件上传下载功能小结

SpringBoot实现文件上传下载功能小结

作者:喝酒不骑马  发布时间:2022-11-09 07:40:07 

标签:spring,boot,文件上传,文件下载

最近做的一个项目涉及到文件上传与下载。前端上传采用百度webUploader插件。有关该插件的使用方法还在研究中,日后整理再记录。本文主要介绍SpringBoot后台对文件上传与下载的处理。

单文件上传


// 单文件上传
@RequestMapping(value = "/upload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) {
 try {
 if (file.isEmpty()) {
   return "文件为空";
 }
 // 获取文件名
 String fileName = file.getOriginalFilename();
 logger.info("上传的文件名为:" + fileName);
 // 获取文件的后缀名
 String suffixName = fileName.substring(fileName.lastIndexOf("."));
 logger.info("文件的后缀名为:" + suffixName);
 // 设置文件存储路径
 String filePath = "D://aim//";
 String path = filePath + fileName + suffixName;
 File dest = new File(path);
 // 检测是否存在目录
 if (!dest.getParentFile().exists()) {
   dest.getParentFile().mkdirs();// 新建文件夹
 }
 file.transferTo(dest);// 文件写入
 return "上传成功";
 } catch (IllegalStateException e) {
   e.printStackTrace();
 } catch (IOException e) {
   e.printStackTrace();
 }
 return "上传失败";
}

如果想要修改文件路径及文件名,修改filePath以及fileName即可。

多文件上传


//多文件上传
@RequestMapping(value = "/uploadMore", method = RequestMethod.POST)
@ResponseBody
public String handleFileUpload(HttpServletRequest request) {
 List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
 MultipartFile file = null;
 BufferedOutputStream stream = null;
 for (int i = 0; i < files.size(); ++i) {
   file = files.get(i);
   String filePath = "D://aim//";
   if (!file.isEmpty()) {
     try {
       byte[] bytes = file.getBytes();
       stream = new BufferedOutputStream(new FileOutputStream(
           new File(filePath + file.getOriginalFilename())));//设置文件路径及名字
       stream.write(bytes);// 写入
       stream.close();
     } catch (Exception e) {
       stream = null;
       return "第 " + i + " 个文件上传失败 ==> "
           + e.getMessage();
     }
   } else {
     return "第 " + i
         + " 个文件上传失败因为文件为空";
   }
 }
 return "上传成功";
}

文件下载


//文件下载相关代码
@RequestMapping("/download")
public String downloadFile(HttpServletRequest request, HttpServletResponse response) {
 String fileName = "aim_test.txt";// 设置文件名,根据业务需要替换成要下载的文件名
 if (fileName != null) {
   //设置文件路径
   String realPath = "D://aim//"
   File file = new File(realPath , fileName);
   if (file.exists()) {
     response.setContentType("application/force-download");// 设置强制下载不打开
     response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
     byte[] buffer = new byte[1024];
     FileInputStream fis = null;
     BufferedInputStream bis = null;
     try {
       fis = new FileInputStream(file);
       bis = new BufferedInputStream(fis);
       OutputStream os = response.getOutputStream();
       int i = bis.read(buffer);
       while (i != -1) {
         os.write(buffer, 0, i);
         i = bis.read(buffer);
       }
       System.out.println("success");
     } catch (Exception e) {
       e.printStackTrace();
     } finally {
       if (bis != null) {
         try {
           bis.close();
         } catch (IOException e) {
           e.printStackTrace();
         }
       }
       if (fis != null) {
         try {
           fis.close();
         } catch (IOException e) {
           e.printStackTrace();
         }
       }
     }
   }
 }
 return null;
}

MultipartConfig配置

可以通过MultipartConfig配置类对文件上传进行全局控制。


@Configuration
public class MultipartConfig {
 @Bean
 public MultipartConfigElement multipartConfigElement() {
   MultipartConfigFactory factory = new MultipartConfigFactory();
   // 置文件大小限制 ,超出此大小页面会抛出异常信息
   factory.setMaxFileSize("2MB"); //KB,MB
   // 设置总上传数据总大小
   factory.setMaxRequestSize("20MB");
   // 设置文件临时文件夹路径
   // factory.setLocation("E://test//");
   // 如果文件大于这个值,将以文件的形式存储,如果小于这个值文件将存储在内存中,默认为0
   // factory.setMaxRequestSize(0);
   return factory.createMultipartConfig();
 }
}

注意事项

前后端文件传输格式应为 multipart/form-data

总结

以上所述是小编给大家介绍的SpringBoot实现文件上传下载功能小结网站的支持!

来源:http://blog.csdn.net/colton_null/article/details/76696674

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com