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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • NSSM使用说明

    NSSM使用说明1、说明NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行。同类型的工具还有微软自己的srvany,不过nssm更加简单易用,并且功能强大。它的特点如下:支持普通exe程序(控制台程序或者带界面的Windows程序都可以)安装简单,修改方便可以重定向输出(并且支持Rotation)可以自动守护封装了的…

    2025年8月14日
    3
  • std::vector find_vectornator工具使用

    std::vector find_vectornator工具使用vector本身是没有find这一方法,其find是依靠algorithm来实现的。#include<iostream>#include<algorithm>#include<vector>intmain(){usingnamespacestd;vector<int>vec;vec.push_back(1);vec.push_back(2);vec.push_back(3);v

    2022年8月31日
    3
  • Visual Studio 2010旗舰版正式版序列号

    Visual Studio 2010旗舰版正式版序列号用记事本打开:Setup–&gt;setup.sdb文件,将[ProductKey]YR3W8FCM2B7BKF9HMQFTCH7WK改成[ProductKey]YCFHQ9DW

    2022年7月20日
    15
  • bytebuffer的容量极限和位置_bytebuffer写文件

    bytebuffer的容量极限和位置_bytebuffer写文件缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区:使用缓冲区有这么两个好处:1、减少实际的物理读写次数2、缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态分配和回收内存的次数举个简单的例子,比如A地有1w块砖要搬到B地由于没有工具(缓冲区),我们一次只能搬一本,那么就要搬1w次(实际读写次数)如果A…

    2022年10月2日
    4
  • ORM学员管理系统单表查询示例

    前期准备工作首先创建好一个项目一:必须使用MySQL创建一个库因为ORM只能对表和数据进行处理,所以库必须自己创建二:进行相关的配置一:二:三:四:五:三创建表必须注意一下俩点

    2022年3月29日
    37
  • Linux系统RWX权限规则[通俗易懂]

    Linux系统RWX权限规则[通俗易懂]话不多说,先了解一下文件所对应的书写字段:其中:-rw-r–r–1rootroot0Nov3014:46a.txt1、新增一个文件test.txt,并该文件对任何人都没有任何权限:root@lhb:~#chmodu=,g=,o=test.txtroot@lhb:~#ls-ltest.txt———-1rootro

    2022年5月10日
    44

发表回复

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

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