Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring boot rest api中将图像发送到angular客户端?_Java_Spring_Image_Spring Boot - Fatal编程技术网

Java 在spring boot rest api中将图像发送到angular客户端?

Java 在spring boot rest api中将图像发送到angular客户端?,java,spring,image,spring-boot,Java,Spring,Image,Spring Boot,我正在使用SpringBoot开发RESTAPI。 我有一个上传图像服务,它在我的项目工作区中存储图像,在数据库中存储图像url。 我有一个实体产品,它有一个图像列表。现在我必须将图像返回给angular客户端 我想问两个问题: 问题1。我应该只向客户端返回一个图像URL列表吗?如果是,客户端应该如何呈现来自这些URL的图像 问题2。或者我应该返回图像列表本身吗?如果是,请告诉我快速有效的逻辑 第三季度。或者我应该一张一张地返回个人图像吗?如果是,请告诉我怎么做 更新: 注意:因为RESTAPI

我正在使用SpringBoot开发RESTAPI。 我有一个上传图像服务,它在我的项目工作区中存储图像,在数据库中存储图像url。 我有一个实体产品,它有一个图像列表。现在我必须将图像返回给angular客户端

我想问两个问题:


问题1。我应该只向客户端返回一个图像URL列表吗?如果是,客户端应该如何呈现来自这些URL的图像

问题2。或者我应该返回图像列表本身吗?如果是,请告诉我快速有效的逻辑

第三季度。或者我应该一张一张地返回个人图像吗?如果是,请告诉我怎么做

更新:

注意:因为RESTAPI在一台机器上,Angular客户端在另一台机器上。我认为图像url需要某种前缀:

假设我的项目在E:/myproject/中,图像在E:/myproject/images/image-name.jpg中,那么图像url的前缀应该是什么


问题1。我应该只向客户端返回一个图像URL列表吗?如果是,客户端应该如何呈现来自这些URL的图像

这个。因为下一步需要做的就是在前端提供这些URL
标记。这也将免除服务器下载图像并向客户端提供服务的责任

问题2。或者我应该返回图像列表本身吗?如果是,请告诉我快速有效的逻辑

这是可能的,但非常困难。我不建议这样做,因为这样会使系统下载两次映像:第一次是从文件存储到后端,第二次是从后端到前端

第三季度。或者我应该一张一张地返回个人图像吗?如果是,请告诉我怎么做


如果图像在下载时需要单独的安全性,则需要使用这种方法。使用您给出的第一种方法可以保护您的图像下载,同样,这种方法将使您下载图像两次。

Q1。我应该只向客户端返回一个图像URL列表吗?如果是,客户端应该如何呈现来自这些URL的图像

Ans:将URL列表返回给angular。Angular将使用此代码

<div *ngFor="let image of images">
   <img src={{image.ImagePath}} />
</div>

它将自动获取url路径中的图像

私有静态最终映射类型_Map=new HashMap();
静止的{
键入"MAP.put"("pdf",MediaType.APPLICATION"pdf);;
键入_MAP.put(“gif”,MediaType.IMAGE_gif);
键入_MAP.put(“jpg”,MediaType.IMAGE_JPEG);
键入_MAP.put(“jpeg”,MediaType.IMAGE_jpeg);
键入_MAP.put(“png”,MediaType.IMAGE _png);
输入MAP.put(“html”,MediaType.TEXT\uhtml);
TYPE_MAP.put(“xls”,MediaType.parseMediaType(“application/vnd.ms excel”);
TYPE_MAP.put(“xlsx”,MediaType.parseMediaType(“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”);
}
@GetMapping(value=“/preview”)
公共响应性预览文件(@RequestParam字符串文件路径){
Resource Resource=newurlresource(path.get(filePath.toUri());
字符串文件名=testFile.png;
字符串扩展名=png;
MediaType MediaType=TYPE_MAP.getOrDefault(扩展名,MediaType.APPLICATION_OCTET_STREAM);
返回ResponseEntity.ok()
.header(HttpHeaders.CONTENT\u处置,“文件名=\”+文件名+“\”)
.contentType(mediaType)
.机构(档案);
}

将文件路径发送到angular客户端,并使用此服务预览该文件。

Ans for Que2:-我认为这是可能的。但是这不是Que 3的有效方式:-如果你有图像列表,那么逐个传递不是有效的方式。假设您必须传递100个图像,然后必须调用api 100次。因此,最好在一个列表中收集所需的图像URL并将其传递给frontend@Aakashkharat我已经更新了问题,请看一下更新。@Aakashkharat它不起作用。由于API和客户端位于不同的计算机上,API返回的图像URL将引用angular客户端计算机的本地存储。@ShafqatShafi很抱歉,我错过了您问题中更新的部分。当我为你的问题找到一些解决方案时,我会添加评论。你能发布支持多个文件扩展名的答案真是太好了。但我已经这样做了。这种方法的缺点是,它需要更多的服务调用,这取决于产品的图像数量,而不是1个。如果您有更好的方法,请提出建议。@ShafqatShafi然后将图像放在某个路径上,并编写
nginx
规则来访问这些图像。并将这些路径发送给您的客户。顺便说一句,谢谢你的夸奖。