SpringBoot解决文件上传,返回可访问路径

SpringBoot解决文件上传,返回可访问路径问题描述:SpringBoot项目中需要上传文件到当前服务器的磁盘(即物理地址),返回可访问的路径给前端。前端利用路径显示文件内容。开发环境:SpringBoot2.0以上、JDK1.81.在springboot中加入下面代码 @Value(“${file.uploadFolder}”) privateStringuploadFolder; @Bean MultipartConf…

大家好,又见面了,我是你们的朋友全栈君。

问题描述:SpringBoot项目中需要上传文件到当前服务器的磁盘(即物理地址),返回可访问的路径给前端。前端利用路径显示文件内容。
开发环境:SpringBoot2.0以上、JDK 1.8

1.在springboot中加入下面代码

	@Value("${file.uploadFolder}")
	private String uploadFolder;
	@Bean
	MultipartConfigElement multipartConfigElement() {
		MultipartConfigFactory factory = new MultipartConfigFactory();
		factory.setLocation(uploadFolder);
		return factory.createMultipartConfig();
	}
	

自定义MVC文件映射


@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
	@Value("${file.staticAccessPath}")
	private String staticAccessPath;
	
	@Value("${smas.captrue.image.path}")
	private String captureImagePath;
	
	@Value("${file.uploadFolder}")
	private String uploadFolder;

	
	@Override
	public void addCorsMappings(CorsRegistry registry) {
		registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods("*").maxAge(3600);
	}

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" + uploadFolder + captureImagePath);
	}

}

文件上传


@RequestMapping(path = "/files")
@RestController
public class FileController {
	
	
	@Value("${smas.captrue.image.path}")
	private String captureImagePath;
	
	@Value("${file.uploadFolder}")
	private String uploadFolder;
	
	@Value("${file.uri}")
	private String uri;
	
	@RequestMapping(value = "/upload")
	public FileVo emailUpload(HttpServletRequest request) {
		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
		Map<String, MultipartFile> files = multipartRequest.getFileMap();
		String path_deposit = uploadFolder + captureImagePath;
		
		List<String> urls = new ArrayList<>();
		for (Map.Entry<String, MultipartFile> entry : files.entrySet()) {
			try {
				String fileName = entry.getValue().getOriginalFilename();
				FileHandleUtil.upload(entry.getValue().getInputStream(), path_deposit, fileName);
				urls.add(FileHandleUtil.getServerIPPort(request) + File.separator + uri + fileName);
			} catch (IOException e) {
				throw new SmasException("文件读取异常");
			}
		}
		
		FileVo fileVo = new FileVo();
		fileVo.setErrno("0");
		fileVo.setData(urls);
		
		return fileVo;
	}
}

在application.properties中增加以下配置

##图片临时路径
#单个数据的大小
spring.servlet.multipart.maxFileSize=10Mb
#总数据的大小
spring.servlet.multipart.maxRequestSize=10Mb
#文件上传后存储路径:D:\home\capture\*.jpg(具体配置如下)
#访问Url:http://ip:port/smas/upload/*
#文件上传目录(window是d/e/f盘, linux是/)(注意Linux和Windows上的目录结构不同)
#file.uploadFolder=/
file.uploadFolder=d://
# 设备截图文件保存路径(文件存在具体的文件夹的路径)
smas.captrue.image.path=home/capture/
#静态资源对外暴露的访问路径(访问图片的路径)
file.staticAccessPath=/upload/**
#浏览器访问
file.uri=/upload/

文件处理工具类

public class FileHandleUtil {
	
	/**
	 * 上传单个文件
	 *
	 * @param inputStream 文件流
	 * @param path        文件路径,如:image/
	 * @param filename    文件名,如:test.jpg
	 * @return 成功:上传后的文件访问路径,失败返回:null
	 */
	public static String upload(InputStream inputStream, String path, String filename) {
		//创建文件夹
		createDirIfNotExists(path);
		//存文件
		File uploadFile = new File(path, filename);
		try {
			FileUtils.copyInputStreamToFile(inputStream, uploadFile);
		} catch (IOException e) {
			throw new SmasException("文件上传失败!");
		}
		return uploadFile.getPath();
	}
	
	/**
	 * 创建文件夹路径
	 */
	private static void createDirIfNotExists(String path) {
		File file = new File(path);
		if (!file.exists()) {
			file.mkdirs();
		}
	}
	
	/**
	 * 删除文件
	 *
	 * @param path 文件访问的路径upload开始 如: /upload/image/test.jpg
	 * @return true 删除成功; false 删除失败
	 */
	public static boolean delete(String path) {
		File file = new File(path);
		return file.exists() == true ? file.delete() : true;
	}
	
	/**
	 * 获取服务部署根路径 http:// + ip + port
	 *
	 * @param request
	 * @return
	 */
	public static String getServerIPPort(HttpServletRequest request) {
		//+ ":" + request.getServerPort()
		return request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134261.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号