SpringBoot上传文件并配置本地资源映射来访问文件的实例代码

网友投稿 405 2022-10-27


SpringBoot上传文件并配置本地资源映射来访问文件的实例代码

1.准备工作

1、新建一个SpringBoot项目加上web依赖, 所有依赖

org.springframework.boot

spring-boot-starter-web

org.thymeleaf

thymeleaf-spring5

org.springframework.boot

spring-boot-starter-test

test

2、application.properties

# 上传文件总的最大值

spring.servlet.multipart.max-request-size=10MB

#spring.servlet.multipart.max-request-size=10KB

# 单个文件的最大值

spring.servlet.multipart.max-file-size=10MB

#spring.servlet.multipart.max-file-size=10KB

# 文件上传路径, 当前项目根目录下的 uploadFile 目录

pro.uploadPath=uploadFile

3、新建文件上传的静态文件 index.html


2. 配置本地资源映射路径 addResourceHandlershttp://

package com.pro.conf;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration

public class WebMvcConf implements WebMvcConfigurer {

@Value("${pro.uploadPath}")

private String uMRCtyPXploadPath;

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler(uploadPath + "/**") // 添加访问路径

// file: 当前项目根目录, 映射到真实的路径下的 uploadPath(变量)目录下

.addResourceLocations("file:" + uploadPath + "/");

}

}

3.上传代码

package com.pro.controller;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.util.ResourceUtils;

import org.springframework.web.bind.annotation.*;

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;

import java.io.*;

import java.text.SimpleDateFormat;

import java.util.*;

@RestController

public class UploadController {

@Value("${pro.uploadPath}")

private String uploadPath;

/**

* 获取文件路径

* @param request 请求体

* @param fileName 文件名称

* @return 文件路径

*/

public String getUploadPath(HttpServletRequest request, String fileName) {

return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/" + uploadPath + "/" + fileName;

}

// 文件上传, 上传到当前项目根目录下的 uploadFile 目录

@RequestMapping("/file/upload")

public Object upload(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request) {

Map map = new HashMap();

map.put("msg", "上传成功");

if (multipartFile.isEmpty()) {

map.put("msg", "空文件");

return map;

}

// 获取文件名

String fileName = multipartFile.getOriginalFilename();

if ("".equals(fileName)) {

map.put("msg", "文件名不能为空");

return map;

}

System.out.println("上传文件原始的名字: " + fileName);

// 使用uuid生成新文件名

String newFileName = UUID.randomUUID().toString().replaceAll("-", "") + fileName.substring(fileName.lastIndexOf("."), fileName.length());

System.out.println("保存的文件的新名字: " + newFileName);

// 获取年月日的日期格式

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

String format = simpleDateFormat.format(new Date());

// 生成以日期分割的文件路径

File readPath = new File(uploadPath +http:// File.separator + format);

System.out.println("存放的文件夹: " + readPath);

System.out.println("存放文件的绝对路径: " + readPath.getAbsolutePath());

// 判断文件夹是否存在

if (!readPath.isDirectory()) {

// 创建文件夹

readPath.mkdirs();

}

// 文件真实的保存路径

File file = new File(readPath.getAbsolutePath() + File.separator + newFileName);

try {

multipartFile.transferTo(file);

// 获取存储路径

String filePath = getUploadPath(request, format + "/" + newFileName);

map.put("path", filePath);

} catch (IOException e) {

e.printStackTrace();

map.put("msg", "上传失败");

}

return map;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为SSH应用第一篇 -节点之间应用SSH
下一篇:什么是码元?什么是比特?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~