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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm怎么编译代码_python编程

    pycharm怎么编译代码_python编程python可以说是新的编程语言,虽说是新编程,但一出来,就受到很长程序员的关注,而且刚出现和java进行对比,很多人就拿python和java进行比较,想python到底好不好,他和java有什么区别,要想知道他们的区别,还是要了解python比较好,要知道python知识,今天我们就来看看python里的pycharm编写代码的方式教学。1、新建项目location:为创建项目的地址(或者叫文…

    2022年8月28日
    4
  • 手机的屏幕分辨率_手机屏幕分辨率尺寸

    手机的屏幕分辨率_手机屏幕分辨率尺寸  什么是分辨率?说白了,分辫率高,屏幕显示就更清晰、更细腻。分辨率不高,屏幕显示就会有颗粒感,粗糙感。一句话:分辨率是屏幕显示清晰度的一个指标。现在手机常用的分辫率有:128*160、176*220、240*320。128*160多用在低档的手机。中档的手机一般分辨率为176*220。中高档手机分辨率多为:240*320。夏普现在有一款手机分辨率达到了480*640。比电脑显示屏还清晰

    2022年8月13日
    11
  • pytest的assert_java单元测试断言

    pytest的assert_java单元测试断言前言断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试failed

    2022年7月29日
    3
  • svn 冲突解决办法(黄色感叹号)

    svn 冲突解决办法(黄色感叹号)

    2021年10月19日
    65
  • Hadoop生态系统介绍「建议收藏」

    Hadoop生态系统介绍「建议收藏」1、Hadoop生态系统概况Hadoop是一个能够对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点。Hadoop的核心是HDFS和Mapreduce,hadoop2.0还包括YARN。下图为hadoop的生态系统:2、HDFS(Hadoop分布式文件系统)源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版。是Hadoo

    2022年5月12日
    36
  • vim wqa(vim编辑中文)

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

    2022年4月11日
    69

发表回复

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

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