Dubbo整合SpringCloud图片显示问题

Tips:公司项目,记录一点经验吧,理解的不对的地方欢迎大神指点

问题:商品图片上传功能(公司没有专门文件服务器)写的保存目录直接是保存在docker容器内部目录下,做的docker外部存储映射到服务器某个文件夹下面(因为怕镜像升级啊什么的 导致图片丢失)。下面粘贴一下

Jenkins配置(外部存储设置 Jenkins构建自动设置)

SpringBoot设置docker容器新增文件夹配置

<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<dockerHost>http://0.0.0.0:2375</dockerHost>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<baseImage>frolvlad/alpine-oraclejdk8:slim</baseImage>
<volumes>/product-images</volumes>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>

这样实际图片上传路径指定/product-images图片上传问题就解决了

问题2:因为图片直接存储在数据库的是相对路径就是比如(/20180909/image.png)实际项目是在docker容器中,图片也是在/product-images 。我返回给前端的文件路径就是这样的 www.域名/Zool/product-images/20180909/image.png 导致找不到图片,在测试服务器上还没发现问题因为测试机有缓存所以导致了这个问题的一个隐藏,今天打正式版导致图片不显示。

思路:项目是SpringBoot 目前我知道的 放到resource目录下 文件直接项目 然后相对路径是能读取到图片的 但是放到docker下,而且也没在resource下,(跟docker没关系)就相当于读机器上某个文件导致的不让读取。

解决办法:

https://域名/Zool/seeImage?imgPath=/product-images" + catalogProductDto.getImages()
@RequestMapping(value = "/seeImage",method = RequestMethod.GET)
public String seeImage(HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = "imgPath") String imgPath ) {
try {
FileInputStream hFile = new FileInputStream(imgPath);
//得到文件大小
int i = hFile.available();
byte data[] = new byte[i];
//读数据
hFile.read(data);
response.addHeader("Content-Type",getContentType(imgPath));
response.addHeader("Accept-Ranges","bytes");
//得到向客户端输出二进制数据的对象
OutputStream toClient = response.getOutputStreStream();
//输出数据
toClient.write(data);
toClient.flush();
toClient.close();
hFile.close();
return "";
}
catch (Exception ex)
{
ex.printStackTrakTrace();
return "处理失败"+ex.getMessage();
}
}
/**
* 获取后缀
* @return
*/
private String getContentType(String imgPath) {
String resultSuffix = "";
try{
String suffix = imgPath.substring(imgPath.lastIndexOf('.'));
System.out.println("url中的文件扩展名:"+ suffix);
if(".jpg".equals(suffix)){
resultSuffix = "image/jpeg";
}
if(".png".equals(suffix)){
resultSuffix = "image/png";
}
}catch (Exception e){
e.printStackTrakTrace();
return "处理失败" + e.getMessage();;
}
return resultSuffix;
}

逻辑:后台传给前台一个请求路径,前台请求调用后台的加载图片方法,图片加载以流的方式返回给前台展示 这个问题解决

Dubbo整合SpringCloud图片显示问题的更多相关文章

  1. 微服务框架Dubbo与Springcloud的区别

    微服务框架Dubbo与Springcloud的区别 微服务主要的优势如下: 1.降低复杂度 将原来偶合在一起的复杂业务拆分为单个服务,规避了原本复杂度无止境的积累.每一个微服务专注于单一功能,并通过定 ...

  2. 商城06——solr索引库搭建&solr搜索功能实现&图片显示问题解决

    1.   课程计划 1.搜索工程的搭建 2.linux下solr服务的搭建 3.Solrj使用测试 4.把数据库中的数据导入索引库 5.搜索功能的实现 2.   搜索工程搭建 要实现搜索功能,需要搭建 ...

  3. SpringBoot与Dubbo整合下篇

    (1)pom.xml引入相关依赖jar包,如下: <dependency> <groupId>com.alibaba</groupId> <artifactI ...

  4. springboot与dubbo整合入门(三种方式)

    Springboot与Dubbo整合三种方式详解 整合环境: jdk:8.0 dubbo:2.6.2 springboot:2.1.5 项目结构: 1.搭建项目环境: (1)创建父项目与三个子项目,创 ...

  5. 4.C#WinForm基础图片(显示和隐藏)

    要求: 软件上有一张图片,默认是隐藏的.用户在文本框中输入身份证号(131226198105223452),点击按钮,如果年龄大于18岁,则显示图片. 知识点: 取当前年份,Date Time Now ...

  6. jQuery css3鼠标悬停图片显示遮罩层动画特效

    jQuery css3鼠标悬停图片显示遮罩层动画特效 效果体验:http://hovertree.com/texiao/jquery/39/ 效果图: 源码下载:http://hovertree.co ...

  7. Latex图片显示问题(1)

    用latex编译后,若用dvipdf生成pdf文件,则其中有个eps图的左侧会显示不完全:若是用dvips--pspdf生成pdf文件,图像显示没问题. 这种情况的问题出在,加载 graphicx 宏 ...

  8. WPF 图片显示中的保留字符问题

    在WPF中显示一张图片,本是一件再简单不过的事情.一张图片,一行XAML代码即可. 但是前段时间遇到了一件奇怪的事: 开发机上运行正常的程序,在某些客户机器上却显示不了图片,而且除了这个问题,其它运行 ...

  9. JS控制图片显示的大小(图片等比例缩放)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 二. Jmeter--关联

    1. 首先建立一个线程组(Thread Group),为什么所有的请求都要加入线程组这个组件呢?不加不行吗?答案当然是不行的.因为jmeter的所有任务都必须由线程处理,所有任务都必须在线程组下面创建 ...

  2. Linux内核同步原语之原子操作【转】

    转自:http://blog.csdn.net/npy_lp/article/details/7262388 避免对同一数据的并发访问(通常由中断.对称多处理器.内核抢占等引起)称为同步. ——题记 ...

  3. C语言回调函数总结

    /* Main program ---calls--> Library function ---calls--> Callback funtion */ #include <stdi ...

  4. ab的使用方法【转】

    使用方法 ab -n 800 -c 800  http://192.168.0.10/ (-n发出800个请求,-c模拟800并发,相当800人同时访问,后面是测试url) ab -t 60 -c 1 ...

  5. sqlalchemy更新和插入操作

    def save_app_info(self): try: # update app_info print(self.dicts) data = db_session.query(App_Info). ...

  6. 删除数组某一项,使用splice的坑

    var arr=[1,2,3,4,5,6,7,8,9,10];//创建数组 var testArr=arr;//让testArr等于创建的数组 arr.splice(0,1);删除arr数组的第一项 ...

  7. Ubuntu vi 上下左右变ABCD问题解决方法

    ---恢复内容开始--- 错误问题:vi上下左右键显示为ABCD的问题 解决方法: 只要依次执行以下两个命令即可完美解决Ubuntu下vi编辑器方向键变字母的问题. 一.执行命令 sudo apt-g ...

  8. Python学习笔记——数据结构和算法(二)

    1.字典中一个键映射多个值 可以使用collections中的defaultdict来实现,defalultdict接受list或者set为参数 from collections import def ...

  9. [loj6038]「雅礼集训 2017 Day5」远行 lct+并查集

    给你 n 个点,支持 m 次操作,每次为以下两种:连一条边,保证连完后是一棵树/森林:询问一个点能到达的最远的点与该点的距离.强制在线. n≤3×10^5 n≤3×10^5 ,m≤5×10^5 m≤5 ...

  10. scrollview和viewpager滑动冲突

    import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; i ...