上传后显示新图像

时间:2017-10-05 19:05:05

标签: reactjs baqend

快速提问,在React中使用Baqend SDK,我使用保存在数据库中的对象的id作为名称来保存配置文件图像。

但是为了在上传后在用户浏览器中更新图像,我修改状态并将& updated = true添加到file.url的末尾,因为它是由Baqend回来。

保存图片代码:

  uploadLogo(event) {
    event.preventDefault();
    const name = this.props.match.params.id+"logo";
    const file = event.target.files[0];
    const img = new db.File({ name: name, data: file, type: 'blob' });
    img.upload({force: true}).then((file) => {
      db.Companies.load(this.props.match.params.id).then(company => {
        this.setState({
          logo: file.url+"?updated=true"
        });
        company.logo = file.url;
        return company.update();
      },
      (error) => {
        alert(error);
      });
    });
  }

这是使用React和Baqend SDK的正确方法吗?如果我通过URL加载一堆图像,会对此产生任何副作用:https://remarkable-apple-95.app.baqend.com/v1/file/www/cce9830b-48eb-422e-830d-72ae28571480logo?BCB&updated=true

我想像这样的url参数会被忽略吗?唯一一个要加载图像的人是?updated = true之后是更新徽标的人,并且只在他更新徽标后立即加载。

还有什么?在file.url中添加了BCB?

1 个答案:

答案 0 :(得分:1)

到目前为止,您的示例看起来很不错。

但是你根本不应该添加额外的查询参数,因为它们会导致CDN中的缓存未命中。 BCB(Baqend Cache Buster)实际上是您尝试使用?upload = true参数存档的内容。如果先前更改了图像,SDK会自动添加这些缓存破坏程序。 BCB确保从服务器获取新鲜映像,并且仅使用重新验证标头进行缓存,直到旧映像在浏览器缓存中过期。我们的CDN缓存知道这个特殊的缓存存储器并将映像请求重写回原始URL以确保缓存命中CDN。 请注意,如果内容发生更改,我们的CDN缓存会立即失效。

此陈旧性信息也通过Bloom过滤器传播到其他客户端。这可以确保其他客户端不会将图像从本地缓存中取出,因此也可以看到新图像。