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)


相关推荐

  • 外企入职第一封英文邮件_投外企要英文简历吗

    外企入职第一封英文邮件_投外企要英文简历吗   一份出色的Resume,是向外企求职的关键之一。不了解有关的常识和程式,不花费相当的心思来展示,以有纯正娴熟的英文功底,决不能获得单位的青睐。在一大堆错误百出、英文表达能力低劣或平庸,毫无针对性和创造性的Resume中,你的那份若能让人眼睛一亮,成功的机会必将大大增加,以下试着结合一个具体的例子给出说明和评述。   BalanceSheet:  基本方法选取适当的工作后,必须看清

    2022年10月20日
  • vue父组件操作子组件的方法_子组件监听不到父组件

    vue父组件操作子组件的方法_子组件监听不到父组件父组件和子组件我们经常分不清什么是父组件,什么是子组件。现在来简单总结下:我们将某段代码封装成一个组件,而这个组件又在另一个组件中引入,而引入该封装的组件的文件叫做父组件,被引入的组件叫做子组件。具

  • idea全局搜索找不到问题

    idea全局搜索找不到问题今天在使用idea全局搜索的时候,发生了存在关键字,但搜索不到的问题这里,解决方法:清楚缓存[File]-&gt;[InvalidateCaches]除此之外,查阅其他资料,发现jdk不生效也可用次方法解决。如果帮助到你,麻烦点个赞~十分感谢…

  • IDEA三种注释快捷键

    IDEA三种注释快捷键三种注释方式  行注释、块注释、方法或类说明注释。一、快捷键:Ctrl+/  使用Ctrl+/,添加行注释,再次使用,去掉行注释二、演示代码if(hallSites!=null&&hallSites.size()>0){//行注释//最大行号intmaxRow=0;//最大列数intmaxCol=0;}块注释一、快捷键:Ctrl+Shift+/  使用Ctr..

  • 发现 Google Buzz 与 Google Code 进行了集成[通俗易懂]

    发现 Google Buzz 与 Google Code 进行了集成[通俗易懂]提交B3logSolo(运行在GAE/J上的博客程序)代码后发现GoogleCode版本控制系统会将提交日志同步发布到GoogleBuzz中:但在Buzzconnectedsites里并没有看到与GoogleCode关联:现在一提交代码就Buzz,还是比较无奈的….本文是使用B3logSolo从简约设计の艺术进行同步发布的原文地址:…

    2022年10月16日
  • 下载网页TS流视频无需手动合并

    下载网页TS流视频无需手动合并可以直接下载无需合并的Chrome插件有StreamRecorder(建议使用录制模式)StreamVideoDownloader有时候我们不想用VLC播放m3u8,可以直接使用下面的浏览器插件NativeHLSPlaybackPlayHLSM3u8NativeMPEG-Dash+HLSPlayback有时候我们下载多段TS想要无损转mp4可以使用下面的工具魔力玄(Medlexo):魔力玄FFmpegts转mp4等工具…

发表回复

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

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