现象

首先,在生产环境中,由于进行编辑图片时,将图片回显到ReactCrop组件中进行可裁剪编辑,然而回显时,需要将图片转化为base64的格式或者blob对象, 此时需要将图片次绘制成canvas进行裁剪,但是,就会出现图片的跨域问题,图片不在一个域下的话,使用 canvas 会污染画布,所以就不行啦!!!!
不过这个其实是需要后端在服务端进行配置就好了,但是前端要硬抗的话,那只能含着泪解决吧!

解决方案一

因为在本地进行图片回显的时候就已经跨域了,所以为了保证在同一域的环境进行处理图片显示的问题。

Mac

  • 设置打开Chorme跨域浏览器指令:

注意: 运行命令之前,必须得彻底关闭当前chorme浏览器。
例如:open -n /Applications/Google Chrome.app/ --args --disable-web-security --user-data-dir=/Users/gml/MyChromeDevUserData/

Windows

  • Chrome 49 以后版本
  • 完整例子
  • 创建 Chrome 快捷方式,在目标一栏后面添加参数即可

以上是设置跨域浏览器的教程。下面回归正题

以上的原始代码在在转化base64时,需要canvas重绘图片,进行生成base64图片格式进行接收,也就是toDataURL()是canvas对象的一种方法,用于将canvas对象转换为base64位编码,但是出现是canvas.tuDataUrl的跨域问题。

  • 将图片转换为base64位编码有什么好处?

1、将图片转换为base64位编码后,图片会跟随代码(html、css、js)一起请求加载,不会再单独进行请求加载; 2、可以防止由于图片路径错误导致图片加载失败的问题;

使用canvas.toDataUrl跨域的解决方式就是在设置img.crossOrigin = “Anonymous”; 方法。然后在服务器端设置请求头"Access-Control-Allow-Origin": “*”。然而在生产环境并无效果。所以避开canvas的跨域问题只能重新更换方案。

补充:

  • img元素中的crossorigin属性

img是我们在web开发中比较常用的一个标签,它代表着文档中的一个图像元素。HTML5给这个标签新增加了一个crossorigin属性,这个属性决定了图片获取过程中是否开启CORS功能

使用场景

在最近的项目开发中,在前端预览图片并让用户裁剪,再将裁剪好的图片上传到后端的服务器上。这里输入的图片地址很有可能来自第三方站点,这就涉及到一个跨域的问题,如果仅仅是展示预览图片的话是没有什么问题的,但这里裁剪图片时需要将裁剪好的图片进行base64编码,如果没有使用crossorign开启CORS功能的话,在使用canvas的toBlob()、toDataURL()和getImageData()方法时就会出现跨域的问题。

crossorigin属性

这个属性有两个值可选:
anonymous:如果使用这个值的话就会在请求中的header中的带上Origin属性,但请求不会带上cookie和其他的一些认证信息。
use-credentials:这个就同时会在跨域请求中带上cookie和其他的一些认证信息。
在使用这两个值时都需要server端在response的header中带上Access-Control-Allow-Credentials属性。

虽然 已经设置但是在生产环境还未生效。这可能是后端的锅了,不过后端一直没有改好的情况下,前端只能硬着头皮去抗下啦。还好经过百般尝试后,出来了解决方案:

以上代码通过axios请求图片路径并且加上请求头的条件,然后返回结果生成Blob对象,然后再创建 URL 的blob对象,赋值到裁剪的组件里进行实时裁剪。

总结:

以上尝试的结果,也是避开canvas的跨域问题,另起炉灶开辟了新的方案,才解决了跨域的根本问题。不过解决办法还有其他方式,后续可以深入研究

以上解决的问题中涉及的知识点也蛮多的:

  1. canvas的toDataUrl跨域问题canvas的toDataUrl跨域问题
  2. crossorigin属性 crossorigin
  3. Cross-Origin Resource Sharing(CORS)解决方案CORS
  4. axios的请求方式 axios
  5. toDataURL()方法 toDataURL()方法

原作者姓名:G294992891
原出处:CSDN
原文链接:项目中的图片跨域问题解决方式_G294992891的博客-CSDN博客

ssm把图片保存到项目中_项目中的图片跨域问题解决方式相关推荐

  1. 项目中的图片跨域问题解决方式

    现象 首先,在生产环境中,由于进行编辑图片时,将图片回显到ReactCrop组件中进行可裁剪编辑,然而回显时,需要将图片转化为base64的格式或者blob对象, 此时需要将图片次绘制成canvas进 ...

  2. 06-若依前后端分离项目跨域问题解决方式

    什么是跨域 跨域就是前后端分离项目前端无法把session等信息传递给后端服务器.跨域源自浏览器同源策略.同源策略是一种约定,同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互. ...

  3. 图片保存到数据库以及从数据库中Load图片

    图片保存到数据库以及从数据库中Load图片 假设有一个数据库Test,下面创建一个表,它有一个字段是image类型,我们把图片转换成Byte数组存放在数据库中: CREATE TABLE Images ...

  4. python如何将图片打包进exe里_用python将图片切分为九宫格 并打包成exe可执行文件(附源码)...

    前言 经常在朋友圈或者微博看到九宫格显示的图片,虽然是九张图片,但是这是一张图片经过切割而成的,显示效果很震撼.今天,我们就用python将图片切分为九宫格,并打包成exe可执行文件,就算不需要代码也 ...

  5. 一键部署开箱即用的代理服务器,解决 SAP UI5 应用开发过程中访问远端 OData 服务的跨域问题试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 作者简介 Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今.Jerry 是 SAP 社区导师,S ...

  6. ASP.Net中关于WebAPI与Ajax进行跨域数据交互时Cookies数据的传递

    本文主要介绍了ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据传递的相关知识.具有很好的参考价值.下面跟着小编一起来看下吧 前言 最近公司项目进行架构调整,由原来的三层架构改 ...

  7. html转pdf 图片跨域问题解决

    之前文章说了, 我这边图片是阿里云的地址, 默认在页面 分页 用Img标签展示, 点击导出的时候再请求一次后端拿回全部 数据 展示(这里展示是定位到其他地方,不遮住原来页面, 然后导出完毕这个页面就销 ...

  8. SpringBoot中配置拦截器时,跨域失效

    SpringBoot中配置拦截器时,跨域失效 前后段分离的项目,配置了跨域后,访问正常,但是配置了拦截器以后,有的访问正常,有的出现跨域问题,发现出现跨域问题的都是拦截器里面没有放行的请求. @Con ...

  9. SpringCloud(10)—— 国寿i动项目经验之(解决前后端跨域请求技术)

    国寿i动项目经验之(解决前后端跨域请求技术): 由于网段原因,导致前端js请求后端服务接口出现跨域,没法实现正常的请求,所以需要对请求进行跨域处理 引入jar: <!-- 解决前后端接口交互跨域 ...

最新文章

  1. AD20使用中文菜单
  2. 【错误记录】Android Studio 向 GitHub 提交代码报错 ( Push failed: Failed with error: Could not read from remote )
  3. Docker Day 4 Docker基础之Dockerfile语法
  4. 学术之问2018-04-05
  5. 将windows 客户机加入msits.com域环境中
  6. 【三分钟讲清区块链/比特币】之二:比特币入门教程
  7. 运用python的方式_对Python使用mfcc的两种方式详解
  8. 掌握基本的git命令,将本地文件上传到gitee
  9. SharePoint PowerShell使用Export-SPWeb和Import-SPWeb指令来导出和导入网站
  10. C++面试题-指针-指针与指针的引用
  11. 如何成为一名很酷的机器人工程师
  12. “粤省事”春运专区上线 31项服务让回家更便捷
  13. 管程(Moniter): 并发编程的基本心法
  14. 《University Calculus》-chape12-偏导数-基本概念
  15. 图论中握手定理的详细解释
  16. python点阵显示数字_Python实现点阵字体读取与转换的方法
  17. JavaWeb学习第二十七天——项目实例
  18. 微信小程序开发价格标准是什么?
  19. html追加没有样式,js/jquery动态添加html,样式和方法不生效的解决方案
  20. 共享 || 32份美妆行业报告

热门文章

  1. 2.域控制器及证书颁发机构
  2. SD-WAN技术分析—Vecloud
  3. CentOS屏幕录制
  4. select返回记录的顺序
  5. vue——组件之elementTable组件再封装
  6. ibatis中使用like模糊查询
  7. php在web端播放amr语音(如微信语音)
  8. MVC4做网站六后台管理:6.2网站信息设置
  9. MagicLinux2.5正式版发布
  10. 最新Visual Studio 2010 下载及学习资料