详解SpringBoot下文件上传与下载的实现

SpringBoot后台如何实现文件上传下载?

最近做的一个项目涉及到文件上传与下载。前端上传采用百度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下文件上传与下载的实现详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是 详解SpringBoot下文件上传与下载的实现 的全部内容, 来源链接: utcz.com/z/323810.html

回到顶部