springboot上传文件(存入服务器,并将URL存入数据库表中)「建议收藏」

springboot上传文件(存入服务器,并将URL存入数据库表中)「建议收藏」publicRupLoadAccessory(@RequestParam(“file”)MultipartFilefile){Map<String,Object>map=newHashMap<>();if(file.isEmpty()){map.put("result","fail&

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

public R upLoadAccessory(@RequestParam("file")MultipartFile file){
		
		Map<String,Object> map = new HashMap<>();
		
		if (file.isEmpty()) {
			return R.ok(map);
			
		}else {
			
			//保存时的文件名
			DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); 
			Calendar calendar = Calendar.getInstance(); 
			String dateName = df.format(calendar.getTime())+file.getOriginalFilename();
			
			System.out.println(dateName);
			//保存文件的绝对路径
			WebApplicationContext webApplicationContext = (WebApplicationContext)SpringContextUtils.applicationContext; 
			ServletContext servletContext = webApplicationContext.getServletContext();
			String realPath = servletContext.getRealPath("/");
			String filePath = realPath + "WEB-INF"+File.separator + "classes" + File.separator +"static" + File.separator + "resource" + File.separator+dateName;
			System.out.println("绝对路径:"+filePath);
			
			File newFile = new File(filePath);
			
			//MultipartFile的方法直接写文件
			try {
				
				//上传文件
				file.transferTo(newFile);
				
				//数据库存储的相对路径
				String projectPath = servletContext.getContextPath();
				HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
				String contextpath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+projectPath;
				String url = contextpath + "/resource/"+dateName;
				System.out.println("相对路径:"+url);
				//文件名与文件URL存入数据库表
				....
				
				
			} catch (IllegalStateException | IOException e) {
				e.printStackTrace();
			}
			
		}
		return R.ok(map);
	}

2018.5.16 更新: 补充一下工具类

@Component
public class SpringContextUtils implements ApplicationContextAware {
	public static ApplicationContext applicationContext; 

	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		SpringContextUtils.applicationContext = applicationContext;
	}

	public static Object getBean(String name) {
		return applicationContext.getBean(name);
	}

	public static <T> T getBean(String name, Class<T> requiredType) {
		return applicationContext.getBean(name, requiredType);
	}

	public static boolean containsBean(String name) {
		return applicationContext.containsBean(name);
	}

	public static boolean isSingleton(String name) {
		return applicationContext.isSingleton(name);
	}

	public static Class<? extends Object> getType(String name) {
		return applicationContext.getType(name);
	}

}

2019.8.6更新— HttpContextUtils 工具类

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

public class HttpContextUtils {

	public static HttpServletRequest getHttpServletRequest() {
		return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

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

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

(0)


相关推荐

  • 阿里短信单发,批量发送_如何用阿里小号发短信

    阿里短信单发,批量发送_如何用阿里小号发短信1.导入<!–阿里云短信–><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId>&lt…

    2022年10月30日
  • 高性能内存池_内存池化

    高性能内存池_内存池化文章目录项目简介内存池的概念定长内存池的实现整体框架设计threadcachethreadcache整体设计threadcache哈希桶映射对齐规则threadcacheTLS无锁访问centralcachecentralcache整体设计centralcache结构设计centralcache核心实现pagecachepagecache整体设计pagecache中获取Span申请内存过程联调threadcache回收内存centralcache回收内存pagecache回收内存释放内存过程联调大于256K

    2022年10月22日
  • 蓝牙协议栈开发板 STM32F1 跑蓝牙协议栈 –传统蓝牙搜索演示以及实现原理[通俗易懂]

    零.概述主要介绍下蓝牙协议栈开发板跑传统蓝牙搜索AT指令以及上位机操作步骤,以及原理一.声明本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:第一篇:蓝牙综合介绍,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(R

  • oracle 函数 如何编写

    oracle 函数 如何编写创建函数的基本格式createorreplacefunction函数名称(参数1,参数2)return参数类型iscreateorreplacefunctiongetPreferentialPrice(priceRetinnumber,clientIdinvarchar2,dd_outp_classinvarchar2)returnnumberis…

  • 同花顺_排名第一的炒股软件

    同花顺_排名第一的炒股软件洛谷P2652同花顺这是在2017日照夏令营的D1T2,我认为质量相当高的一道题,第一次在赛场上做的时候爆零了,当时态度不很端正,暴力不想打,想投机取巧骗分,还是不要把希望压在不确定的事情上,有多

  • string数组怎么定义对象_定义二维字符型数组

    string数组怎么定义对象_定义二维字符型数组这里是IT修真院分享课,今天要分享的主题是【string数组怎么定义】string数组的定义有三种:Stringarr[]=newString[10];//创建一个长度为10的String类型数组。Stringarr[]={“张三”,”李四”};String[]str=newString[]{“”,””,””,””,””};Stringar…

发表回复

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

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