【问题标题】:How does GridFS work within Meteor?GridFS 如何在 Meteor 中工作?
【发布时间】:2018-10-07 17:30:53
【问题描述】:

我正在开发一个应用程序,管理员可以在其中上传时间表(只是一个文件),而用户可以下载该上传的文件。它现在正在使用 Meteor 中的上传功能,并将解码的文件保存到 Mongo DB。

问题是我只能上传 16mb 左右的文件。我做了一些研究,显然你可以用 GridFS 解决这个问题。我对此很陌生,文档似乎根本没有帮助。有人可以给我一个简单的例子来说明如何使用 GridFS 来解决我的问题吗?或者有没有人推荐任何其他解决方案?

这是我用于将文件上传到服务器的 UploadSchedule 方法:

uploadSchedule() {
    if (this.fileListNextMonth == null) {
      this.alertController.create(
        {
          title: "Error",
          subTitle: "Cannot upload file!",
          buttons: ['Ok']
        }
      ).present();
    } else {
      this.fileName = this.fileList[0].name;

      this.getBase64(this.fileList[0]).then(
        data =>
          this.scheduleProvider.uploadSchedule(data, this.fileName, true).then(observable => {
            const subscription = observable.subscribe(data => {
              console.log("data: " + data);
            }, err => console.error(err), () => subscription.unsubscribe());
          })
      );
    }
  }

在我的 ScheduleProvider 中有一个方法 (uploadSchedule),它使用特定文件向服务器发出 post 请求。在后端,我只是对已上传的文件进行插入,因此它将作为字符串保存到数据库中。

希望有人可以帮助我。

谢谢!

【问题讨论】:

    标签: file ionic-framework meteor file-upload gridfs


    【解决方案1】:

    我建议使用像 https://github.com/VeliovGroup/Meteor-Files 这样的包,因为它有很好的文档记录和测试,还允许您使用其他位置(例如 AWS S3)进行文件存储。

    您可以直接使用gridfs。但我不会推荐它。

    如果您真的只想将文件存储在 Mongo 数据库中,这里有一个很好的包:https://github.com/vsivsi/meteor-file-collection,这将有助于简化工作。

    这两个包我自己都用过,效果很好。

    还有https://github.com/CollectionFS/Meteor-CollectionFS,这是一个很好的包,但不再积极维护。我相信它使用起来很复杂。

    在您的代码中,您似乎正在将文件转换为 base64 表示形式,这是可行的,但它确实使文件比原始文件大很多。在大文件上,这可能会导致一些性能挑战(以及它需要的额外内存)。

    我建议将您的图像或文件存储在 S3 等外部服务上,因为它可以从 Meteor 服务器卸载它们的检索,并且您会注意到性能差异 - 这就像为您的资产使用 CDN。

    【讨论】:

    • 我绝对同意这里...尤其是如果您托管了 mongo,您需要按 GB 支付服务费。将文件上传到数据库会迅速增加您的托管费用,让您后悔。
    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 2015-05-25
    • 1970-01-01
    • 2015-10-11
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多