springboot项目图片上传,回显;使用外部静态资源路径回显图片

Posted lazyli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot项目图片上传,回显;使用外部静态资源路径回显图片相关的知识,希望对你有一定的参考价值。

//前端图片是Base64字符串形式传递图片参数;需要用Base解密,写入到本地磁盘中
public String upload(String string)

	解析图片(Base64):
	response.setHeader("Access-Control-Allow-Origin","*");  // 第二个参数填写允许跨域的域名称,不建议直接写 "*"
	response.setHeader("Access-Control-Allow-Headers", "X-Requested-With");
	response.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");

	// 接收跨域的cookie
	response.setHeader("Access-Control-Allow-Credentials", "true");
	url = url.substring(url.indexOf(",")+1,url.length());
	String imagePath = null;
	BASE64Decoder decoder = new BASE64Decoder();
	String strName = null;
	String string2 = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
	System.out.println(string2);
	try 
		byte[] bytes = decoder.decodeBuffer(url);
		// 处理数据
		for (int i = 0; i < bytes.length; ++i) 
			if (bytes[i] < 0) 
				bytes[i] += 256;
			
		
		strName = UUID.randomUUID().toString();
		System.out.println(strName);
		imagePath = "E:/javaworkspace/project/rbApi/image/"+strName+".png";
		OutputStream out = new FileOutputStream(imagePath);
		out.write(bytes);
		out.flush();
		out.close();
	catch (Exception e)
		e.printStackTrace();
	

//springboot项目
//以@RequestParam("url") List<MultipartFile> url接收上传图片;写入到本地磁盘中
//返回路径是磁盘路径,将磁盘路径映射到外部静态资源;访问:项目路径+映射路径+文件名
@RequestMapping(value = "/uploadImage")
@ResponseBody
public PictureUrl upload(@RequestParam("url") List<MultipartFile> url, HttpServletRequest request, HttpServletResponse response)
	PictureUrl pictureUrl = new PictureUrl();
	String contentPath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
	try
		if(url.size() == 0)
			pictureUrl.setStatusText("false");
		else
			OutputStream os = null;
			List<String> urlList = new ArrayList<>();
			for (MultipartFile file : url)
				String fileName = file.getOriginalFilename();
				String fileNam2 = UUID.randomUUID().toString();
				String imagePath = "E:/javaworkspace/project/rbApi/image/"+fileNam2+".png";
				File file1 = new File(imagePath);
				os = new FileOutputStream(file1);
				os.write(file.getBytes());
				//String imagePath2 = contentPath + "/showImage?id=" + fileNam2+".png";
				//String imagePath2 = upload + fileNam2+".png";
				String imagePath2 = contentPath+"/image/"+fileNam2+".png";
				urlList.add(imagePath2);
				System.out.println("文件路径:"+imagePath2);
			
			pictureUrl.setStatusText("ok");
			pictureUrl.setImageUrl(urlList);
			os.flush();
			os.close();
		

	catch (Exception e)
		e.printStackTrace();
		pictureUrl.setStatusText("false");
		return pictureUrl;
	
	
	return pictureUrl;


//将图片以二进制的形式输出,前端路径可为:(项目路径+方法+文件名)
 /**
 * 回显图片
 * @param id
 * @param response
 * @return
 */
@RequestMapping("/showImage")
@ResponseBody
public AjaxResult download(String id, HttpServletResponse response)
	try
		response.setContentType("image/jpeg/jpg/png/gif/bmp/tiff/svg");
		String path ="E:/javaworkspace/project/rbApi/image/"+id;
		File file = new File(path);//括号里参数为文件图片路径
		if(file.exists())   //如果文件存在
			InputStream in = new FileInputStream(path);   //用该文件创建一个输入流
			OutputStream os = response.getOutputStream();  //创建输出流
			byte[] b = new byte[1024];
			while( in.read(b)!= -1)
				os.write(b);
			
			in.close();
			os.flush();
			os.close();
		
		return null;
	catch (Exception e)
		e.printStackTrace();
		return AjaxResult.build("false",null );
	


//将磁盘文件路径映射为项目访问路径
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer 
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) 
        registry.addResourceHandler("/image/**").addResourceLocations("file:E:/javaworkspace/project/rbApi/image/");
    

  得到

以上是关于springboot项目图片上传,回显;使用外部静态资源路径回显图片的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot vue图片上传不能立即回显问题解决

SpringBoot整合Markdown实现图片上传和图片再次回显(详细步骤)

SpringBoot整合Markdown实现图片上传和图片再次回显(详细步骤)

SpringBoot整合Markdown实现图片上传和图片再次回显(详细步骤)

uview+uniapp+springboot 实现小程序上传图片并回显

springboot+thymeleaf 实现图片文件上传及回显