GridFS 如何在 Meteor 中工作?
How does GridFS work within Meteor?
我正在开发一个应用程序,管理员可以在其中上传日程表(只是一个文件),用户可以下载上传的文件。它现在与 Meteor 中的上传功能一起工作,解码文件保存到 Mongo 数据库。
问题是我只能上传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 请求。在后端,我只是对已上传的文件执行插入,因此它将作为字符串保存到数据库中。
希望有人能帮助我。
谢谢!
我建议使用像 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。
我正在开发一个应用程序,管理员可以在其中上传日程表(只是一个文件),用户可以下载上传的文件。它现在与 Meteor 中的上传功能一起工作,解码文件保存到 Mongo 数据库。
问题是我只能上传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 请求。在后端,我只是对已上传的文件执行插入,因此它将作为字符串保存到数据库中。
希望有人能帮助我。
谢谢!
我建议使用像 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。