Springboot 上传图片后不能回显

土豆你个番茄 上海大学 高级软件工程师  2019-06-06 05:48:08
问题:图片不能回显

项目中使用了JWT做请求拦截验证。

使用IDEA运行SpringBoot项目,上传文件到制定的本地目录下,但是回显的时候不能显示。

请求回显的路径被拦截的时候没有登录,不响应请求。

但是如果设置不拦截,在资源映射的时候又不能进入到映射的方法中。

上传图片没有问题,一下是映射图片的方法,应该这么解决?

@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {

@Value("${moregs-oss.project-name}")
private String project;

@Value("${moregs-oss.root-path}")
private String rootPath;

/**
* 自动转换时间格式
*
* @param registry date
*/
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new DateFormatter("yyyy-MM-dd HH:mm:ss"));
}

/**
* 资源映射路径
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(project + "/**").addResourceLocations(rootPath);
}
}

这么感觉无解呢。。。。。



高手赐教啊


...全文
116 1 收藏 7
写回复
7 条回复
土豆你个番茄 2019年06月11日
引用 5 楼 Sunyiban 的回复:
[quote=引用 4 楼 土豆你个番茄 的回复:] [quote=引用 3 楼 Sunyiban 的回复:] 感觉。。你把请求回显的路径从拦截器排除掉不就行了。。吧~~
。。。。 排除了之后 @Configuration 这个类进不去[/quote] 那就在登录拦截那里把静态资源访问路径排除了[/quote] 不是一个拦截器吗?没有多个拦截器啊 使用的是spring-Security 所有的请求在一个拦截器中
回复 点赞
ninuxGithub 2019年06月11日
考虑都项目启动的时候是建立的一个临时的目录的; 上线的项目如果有文件上传需要 指定一个webapp 以外的路径作为文件的寄存点; 图片的显示是在线显示吗? 可以参考

/**
	 * 
	 * @param headImg
	 * @param route
	 *            headImg 是获取用户头像的路由, pushinfo 是获取推流地址的二维码的路由
	 * @param response
	 * @throws IOException
	 */
	@ResponseBody
	@RequestMapping(value = "/showImage", method = RequestMethod.GET)
	public void showImage(@RequestParam(value = "imgName") String imgName, @RequestParam(value = "route") String route, HttpServletResponse response) throws IOException {
		response.setContentType("text/html; charset=UTF-8");
		response.setContentType("image/jpeg");
		String parentPath = FileUtils.getBaseFilePath() + "/" + route;
		FileUtils.createParentPath(parentPath);
		String fullFileName = parentPath + "/" + imgName;
		logger.debug("showImage fullFileName is :{}", fullFileName);
		FileInputStream fis = new FileInputStream(fullFileName);
		OutputStream os = response.getOutputStream();
		try {
			int count = 0;
			byte[] buffer = new byte[1024 * 1024];
			while ((count = fis.read(buffer)) != -1) {
				os.write(buffer, 0, count);
			}
			os.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (os != null) {
				os.close();
			}
			if (fis != null) {
				fis.close();
			}
		}
	}

回复 点赞
Sunyiban 2019年06月10日
引用 4 楼 土豆你个番茄 的回复:
[quote=引用 3 楼 Sunyiban 的回复:] 感觉。。你把请求回显的路径从拦截器排除掉不就行了。。吧~~
。。。。 排除了之后 @Configuration 这个类进不去[/quote] 那就在登录拦截那里把静态资源访问路径排除了
回复 点赞
土豆你个番茄 2019年06月10日
引用 3 楼 Sunyiban 的回复:
感觉。。你把请求回显的路径从拦截器排除掉不就行了。。吧~~
。。。。 排除了之后 @Configuration 这个类进不去
回复 点赞
Sunyiban 2019年06月10日
感觉。。你把请求回显的路径从拦截器排除掉不就行了。。吧~~
回复 点赞
土豆你个番茄 2019年06月10日
引用 1 楼 对梦想的牵挂 的回复:
设置不拦截,在资源映射的时候又不能进入到映射的方法中是什么意思啊? 把所有图片上传显示的接口和静态资源都放开不就能显示了么
上传的位置是随便制定的。 回显的时候要显示我们之前上传的图片
回复 点赞
对梦想的牵挂 2019年06月10日
设置不拦截,在资源映射的时候又不能进入到映射的方法中是什么意思啊? 把所有图片上传显示的接口和静态资源都放开不就能显示了么
回复 点赞
发动态
发帖子
Java EE
创建于2007-09-28

3.7w+

社区成员

22.5w+

社区内容

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区公告
暂无公告