0

快速提问,在 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 是做什么的?

4

1 回答 1

1

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

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

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

于 2017-10-05T21:05:20.453 回答