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\5\*.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();
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年5月2日 下午3:40
下一篇 2022年5月2日 下午3:40


相关推荐

  • 网站被恶意刷流量解决方案

    网站被恶意刷流量解决方案很多站长朋友可能会经常遇到被同行竞争对手恶意刷流量的情况,而且流量ip来路是随机的,全国各地乃至全世界的ip都有,根本没办法查出来是谁干的。一般出现这种情况都是对方用流量宝或者流量精灵来刷你网站的,目的很明显,对方要么就是用这些垃圾流量来掩盖自己的ip,从而达到攻击入侵等不可告人的目的,要么就是想用恶意刷流量的方式让你合作的广告联盟帐号被封禁。大部分站长都会对此束手无策,有些甚至被吓得撤下广告,关…

    2026年4月17日
    3
  • Java 编码转换_java 判断文件编码

    Java 编码转换_java 判断文件编码中文各种编码间互相转换,非常有用哦,借鉴了公司的资料,转载本人不负任何责任,呵呵主要是用hcutf8.txt里面的内容根据转码替换,呵呵packageencoding;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.Unsupporte

    2022年8月22日
    9
  • Cursor 集成 MCP 全流程教程:从环境搭建到功能实现

    Cursor 集成 MCP 全流程教程:从环境搭建到功能实现

    2026年3月16日
    2
  • mac系统下安装pycharm

    mac系统下安装pycharmmac 系统下安装 pycharm 前言随着人工智能的不断发展 机器学习这门技术也越来越重要 也有很多人都因为做自动化 爬虫会学 python 今天写的是 pycharm 编译器 在 mac 上如何安装 废话不多说 上步骤一 第一步下载示例 下载安装软件的第一步骤 就是先下载 先去 pycharm 官网溜达一圈去 传送门在这 链接 https www jetbrains com zh cn pycharm1 先看到的是首页 点击下载进入页面 2 进入到这个页面肯定要选择 macOS 了然后直接点下载就 OK 了

    2026年3月27日
    2
  • 国内免费高匿IP代理软件

    国内免费高匿IP代理软件免费IP代理软件能快速获取代理ip资源,智能验证,一键设置取消代理。免费IP代理软件1.支持免费IP代理2.普通代理3.高匿代理4.Http代理5.Https代理6.自动验证无效代理7.一键设置取消代理8.导出到文本或Excel9.绿色免费软件。511遇见免费IP代理媒体预览https://www.bilibili.com/video/BV1ty4y1V72ehttps://v.youku.com/v_show/id_XNTE5MzgyMTU

    2022年6月16日
    129
  • c语言角度换成弧度的编码,角度弧度转换代码

    c语言角度换成弧度的编码,角度弧度转换代码搜索热词下面是编程之家 jb51 cc 通过网络收集整理的代码片段 编程之家小编现在分享给大家 也给大家做个参考 defd2r puts Enterthevalu t gets chomp to f correspondin 3 14 t 180puts Thevalueofgi

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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