前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot怎么获取到上传到Linux服务器(非项目内)的图片

SpringBoot怎么获取到上传到Linux服务器(非项目内)的图片

作者头像
CBeann
发布2023-12-25 16:53:27
1630
发布2023-12-25 16:53:27
举报
文章被收录于专栏:CBeann的博客CBeann的博客

问题介绍:

到我们把SpringBoot项目打包到Linux服务器上,文件的上传和上传的文件的下载路径及其获取就是一个比较棘手的问题。通俗一点就是解决像下面demo.jar中访问到110.png图片的文件,比如在页面显示啊

(图片很重要,图片很重要,图片很重要)

解决问题思路:

如果你用过kaptcha验证码插件,那你就应该猜到我的思路了,用流的方式请求URL返回到前端,而不能用

代码语言:javascript
复制
/abc/1123.jpg

这种方式

Demo介绍(路径见上图)

demo代码下载

在有图片上传的html上,将图片上传到上图中的位置,并且将图片的名称存到session中

访问success跳转到success.html中,其实success.html中有一个像请求验证码图片一样但是处理你上传图片的url

index.html

上传图片表单

代码语言:javascript
复制
<h1>图片上传</h1>
<form action="upload" method="post"  enctype="multipart/form-data">
<input  type="file"  name="file"/><input type="submit" value="submit">
</form>
上传图片的Contoller

将图片存到上面图片的位置中,没什么好解释的

代码语言:javascript
复制
@RequestMapping("/upload")
	@ResponseBody
	public String upload(MultipartFile file,HttpSession session) throws Exception {
		// 打印文件的名称
		System.out.println("FileName:" + file.getOriginalFilename());
		//将名字存到session中
		session.setAttribute("photoName", file.getOriginalFilename());
		
		// 确定上传文件的位置
		// 本地路径,测试确实能通过
		// String path = "E:/temp/temp";
		// Linux系统
		String path = "/usr/CBeann/temp";
		// 获取上传的位置(存放图片的文件夹),如果不存在,创建文件夹
		File fileParent = new File(path);
		if (!fileParent.exists()) {
			fileParent.mkdirs();
		}
		File newFile = new File(path + "/", file.getOriginalFilename());
		// 如果不存在,创建一个副本
		if (!newFile.exists()) {
			newFile.createNewFile();

		}
		// 将io上传到副本中
		file.transferTo(newFile);

		return "上传成功";
	
	
	}
跳转及其success.html

注意:success中img的src为一个controller中的url,而不是绝对或者相对路径,类似验证码插件url的意思

代码语言:javascript
复制
//跳转到success.html页面
	@RequestMapping("/success")
	public String successHtml(){	
		return "success";	
	}
代码语言:javascript
复制
<body>
---------
<img alt="demo" src="showimage"/>
---------------

</body>
将图片以流的方式传到前端显示

获得Linux服务上的图片文件的file,然后以流的方式写入response中,我这用的是session或者上传图片的值

代码语言:javascript
复制
@RequestMapping("/showimage")
	public String showphoto(HttpServletRequest request, HttpServletResponse response, HttpSession session)
			throws Exception {

		response.setDateHeader("Expires", 0);
		response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
		response.addHeader("Cache-Control", "post-check=0, pre-check=0");
		response.setHeader("Pragma", "no-cache");
		response.setContentType("image/jpeg");

		// 获得的系统的根目录
		File fileParent = new File(File.separator);
		String photoName = (String) session.getAttribute("photoName");
		// 获得/usr/CBeann目录
		File file = new File(fileParent, "usr/CBeann/temp/" + photoName);
		

		BufferedImage bi = ImageIO.read(new FileInputStream(file));
		ServletOutputStream out = response.getOutputStream();
		ImageIO.write(bi, "jpg", out);
		try {
			out.flush();
		} finally {
			out.close();
		}
		return null;

	}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题介绍:
  • 解决问题思路:
  • Demo介绍(路径见上图)
    • index.html
      • 上传图片的Contoller
        • 跳转及其success.html
          • 将图片以流的方式传到前端显示
          相关产品与服务
          验证码
          腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档