zoukankan      html  css  js  c++  java
  • 使用图片跨域方式获取图片数据 使用 jsonp 方式跨域获取数据

    使用图片跨域方式获取图片数据

    
    server.get(`/mockImg`, (req, res, next) => { // 使用图片跨域方式获取图片数据
      req.headers.origin && res.setHeader(`Access-Control-Allow-Origin`, req.headers.origin)
      res.setHeader(`content-type`, `image/gif`)
      res.setHeader(`data`, `image/gif`)
      var b64string = 'R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='
      var buf = Buffer.from(b64string, 'base64');
      res.send(buf)
    
      function getImgBase64(api) {
        return new Promise((resove, reject) => {
          var img = new Image();
          img.setAttribute('crossorigin', 'anonymous')
          img.onload = () => {
            function getBase64Image(img) {
              var canvas = document.createElement('canvas')
              var ctx = canvas.getContext('2d')
              ctx.drawImage(img, 0, 0)
              return canvas.toDataURL()
            }
            resove(getBase64Image(img))
          }
          img.onerror = err => reject(err)
          img.src = api
        })
      }
      // getImgBase64(`http://localhost:9001/api/t/mockImg`)
    })
    

    使用 jsonp 方式跨域获取数据

    
    server.get(`/jsonp`, (req, res, next) => { // 使用 jsonp 方式跨域获取数据
      const {cb} = require('querystring').parse(req.url.replace(/.*?/, ''))
      res.send(`${cb}({a:1})`)
      function jsonp(api, cb) { // 从 jsonp 中获取数据
        return new Promise((resove, reject) => {
          const cbName = `jsonp${Date.now()}${String(Math.random()).slice(2)}`
          window[cbName] = res => {cb && cb(res); resove(res)}
          const src = `${api}${api.includes('?') ? '&' : '?'}cb=${cbName}`
          const script = document.createElement('script')
          script.setAttribute('crossorigin', 'anonymous')
          script.src = src
          script.onload = () => {
            const script = document.querySelector(`script[src*="${cbName}"]`)
            script.remove()
            delete window[cbName]
          }
          script.onerror = err => reject(err)
          document.body.append(script)
        })
      }
      // jsonp(`http://localhost:9001/api/t/jsonp`)
    })
    
  • 相关阅读:
    重构前的程序:通过rsync命令抓取日志文件
    标准输入、输出和错误和文件重定向
    错误处理的思考
    测试和恢复性的争论:面向对象vs.函数式编程
    哈佛经济学家关于工作效率的意外发现
    追求代码质量: 监视圈复杂度
    天猫程序猿高端算法找妹子
    代码度量工具——SourceMonitor的学习和使用
    我们能从java的HelloWorld学到什么?
    Java高新技术第二篇:反射技术
  • 原文地址:https://www.cnblogs.com/daysme/p/12303261.html
Copyright © 2011-2022 走看看