vue部署在容器中,接收后端传来的图片路径,但是无法访问
·
今天在写vue前端的项目的时候,发现后端传来的绝对路径什么的都是正确的,在服务器中的文件夹中也能找到对应的图片,但是前端
<img :src="img.savePath"/> //img.savePath是后端传回的绝对路径的存储变量
这个显示不了图片,发现是因为,前端部署在了容器中,无法直接在容器中访问文件夹其他目录下的数据(会破坏隔离性).所以就给出方案(完全不用改动后端部分)
采用nginx(反向代理)将图片的路径暴露在一个端口上,能通过url的方式进行访问.
首先:配置nginx代理
找到目标图片路径/data/cd/image/(我的是这个)
编写反向代理文件
nginx nano /你的反向代理文件路径/配置文件名称(自由起名)
进入之后
server{
listen 8000; #你想要放置的端口
server_name 192.168.100.1;#你本机的ip
location /{
root /data/cd/image/;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, OPTIONS'; # 补全被截断的响应头,恢复完整跨域配置
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
expires 7d; # 移到location块内,缓存生效
autoindex off; # 关闭目录浏览,生产环境必关(可选,推荐)
}
}
这样你就可以在
http://192.168.100.1:8000/test.jpg
这个网址下找到这个图片了
其次:修改前端代码
由于后端传来的代码是
img.savePath="/data/cd/image/test.jpg"
所以你可以设置两个常量来做替换
const HOST_IMG_ROOT='/data/cd/image'
const IMAGE_BASE_URL='http://192.168.100.1:8000'
然后采用
img.savePath.replace(HOST_IMG_ROOT,IMAGE_BASE_URL)
//语法是.replace(替换掉的部分,替换成);
所以就可以写成
<img :src="img.savePath.replace(HOST_IMG_ROOT,IMAGE_BASE_URL)" v-if="img.savePath" style="max-width: 150%; margin-top: 10px;"/>
如果大家感兴趣可以点点关注,我这个项目还在进行中,已经到了后期,这是我自己手搓的第一个大型项目,还有其他难题的话后续会跟大家分享,也请大佬也可以帮我指出错误或者提供思路
更多推荐
所有评论(0)