问题描述

新浪图床接口现在开启防盗链了,不是weibo.com的访问都会返回403。不过这个很好解决,只用在headers里面改写referer就行了。 对于浏览器下载Header Editor插件并且配置headers就行了

前端调用图片

前端调用的时候就很简单了只需要fetch + blobPermalink,使用 fetch 方法添加 headers 然后把结果加载到 <img>

JavaScript
const src = 'https://tvax1.sinaimg.cn/large/ec43126fgy1h20hgl4i0pj21401e0hdt.jpg';
const options = {
  headers: {
    'Some-Header': '...'
  }
};

fetch(src, options)
  .then(res => res.blob())
  .then(blob => {
    imgElement.src = URL.createObjectURL(blob);
  });

接口调用图片

接口调用就比较简单了,我们只需要返回base64格式的图片数据就行了 需要通过异步请求设置请求头信息 使用 Buffer APIs 把二进制数据转换为base64

JavaScript
  const imgData = await axios.get('https://tvax1.sinaimg.cn/large/ec43126fgy1h20hgl4i0pj21401e0hdt.jpg', {
      responseType: 'arraybuffer',
      headers: {
        'referer': 'https://www.weibo.com',
      },
    });
    const img = 'data:image/jpg;base64,' + Buffer.from(imgData.data).toString('base64');

最后再返回base64即可