SpringBoot上传图片到指定位置并返回URL的实现

2023-01-21 0 4,178

目录

想做一个上传图片的功能,来展示用户上传的图片。

在返回给前端的URL上弄了好久,前端一直无法访问到URL,结果一直显示404。 倒腾了一上午发现是 文件路径映射的问题,后端部分有讲解决办法,可供大家参考

需求

前端的图片上传到服务器指定的文件目录,并且将URL返回给前端

前端部分(ElementUI+Vue.js

ElementUI的导入和使用:(组件 | Element)

Vue.js的导入和使用:(Vue.js (vuejs.org))

<template>
  <div class=\"form-group\">
    <el-upload
        action=\"http://localhost:8081/upload\"
        :on-preview=\"handlePreview\"
        accept=\'.jpg\'
        :limit=\"10\"
    >
        <el-button size=\"small\" type=\"primary\">点击上传</el-button>
        <div slot=\"tip\" class=\"el-upload__tip\">只能上传jpg/png文件,且不超过500kb</div>
    </el-upload>
  </div>
</template>

<script>

export default {
    name: \"updateImg\",
    methods:{
        handlePreview(file){
            window.open(file.response.url);
            console.log(file.response.url);
        }
    }
}
</script>

<style scoped>

</style>

效果:

SpringBoot上传图片到指定位置并返回URL的实现

后端部分(SpringBoot)

1.先配置application.yml文件

file-save-path:要保存图片的位置 早上遇到404问题是因为 在 配置file-save-path时候 没有在最后的 images后加上 ‘\\’ 导致路径无法匹配到

server:
  port: 8081
  
file-save-path: D:\\SoftWare\\SpringToolSuite\\WorkPlace\\HelloWorld\\src\\main\\resources\\static\\images\\
spring:
  mvc:
    view:
      prefix: /
      suffix: .jsp

2.映射资源-重写WebMvcConfigurer接口,实现对资源的映射

package com.etc.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer{
	
	@Value(\"${file-save-path}\")
	private String fileSavePath;
	
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler(\"/images/**\").addResourceLocations(\"file:\"+fileSavePath);
		//System.out.println(\"file:\"+fileSavePath);
	}

}

addResourceHandler("/images/**")表示凡事以 /images/ 路径发起请求的,按照 addResourceLocations("file:"+fileSavePath)的路径进行映射

例如有一个url:http://localhost:8081/images/Hello.jpg

表示要对Hello.jpg进行请求访问,这时候服务器会把这个请求的资源映射到我们配置的路径之下 也就是会到 fileSavePath 下去寻找 是否有 Hello.jpg 这个资源,返回给前端页面。

3.Controller代码

这边为了方便使用Map进行返回,实际开发中使用封装好的类型进行返回

package com.etc.controller;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.sound.midi.SysexMessage;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@CrossOrigin
@RestController
public class ImgUploadController {

	SimpleDateFormat sdf = new SimpleDateFormat(\"/yyyy.MM.dd/\");
	
	@Value(\"${file-save-path}\")
	private String fileSavePath;
	
	@PostMapping(\"/upload\")
	public Map<String, Object> fileupload(MultipartFile file,HttpServletRequest req){
		
		Map<String,Object> result = new HashMap<>();
		//获取文件的名字
		String originName = file.getOriginalFilename();
		System.out.println(\"originName:\"+originName);
		//判断文件类型
		if(!originName.endsWith(\".jpg\")) {
			result.put(\"status\",\"error\");
			result.put(\"msg\", \"文件类型不对\");
			return result;
		}
		//给上传的文件新建目录
		String format = sdf.format(new Date());
		String realPath = fileSavePath + format;
		System.out.println(\"realPath:\"+realPath);
		//若目录不存在则创建目录
		File folder = new File(realPath);
		if(! folder.exists()) {
			folder.mkdirs();
		}
		//给上传文件取新的名字,避免重名
		String newName = UUID.randomUUID().toString() + \".jpg\";
		try {
			//生成文件,folder为文件目录,newName为文件名
			file.transferTo(new File(folder,newName));
			//生成返回给前端的url
			String url = req.getScheme() + \"://\" + req.getServerName() + \":\" + req.getServerPort() +\"/images\"+ format + newName;
			System.out.println(\"url:\"+url);
			//返回URL
			result.put(\"status\", \"success\");
			result.put(\"url\", url);
 		}catch (IOException e) {
			// TODO Auto-generated catch block
 			result.put(\"status\", \"error\");
 			result.put(\"msg\",e.getMessage());
		}
		return result;
				
	}
}

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 SpringBoot上传图片到指定位置并返回URL的实现 http://www.20zxx.cn/463086/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务