- Hướng dẫn
- Gridfs
- API Gridfs
Trình điều khiển MongoDB Node.js hiện hỗ trợ API dựa trên luồng cho GridFs tương thích với các luồng Node.js, do đó bạn có thể trực tiếp từ các luồng tệp đến MongoDB. Trong hướng dẫn này, bạn sẽ thấy cách sử dụng API phát trực tuyến GridFS mới để tải lên bản ghi âm 28 MB được cấp phép CC từ Richard Wagner, Opera Die Meistersinger von Nurnberg đến MongoDB bằng cách sử dụng các luồng.
Được thiết lập
Chức năng phát trực tuyến GRIDFS mới là một phần của bản phát hành 2.1.0 của trình điều khiển MongoDB Node.js. Để sử dụng nó, hãy đặt sự phụ thuộc sau trong
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
0 của bạn. Chúng tôi thực sự khuyên bạn không nên sử dụng các phiên bản từ GitHub trong sản xuất, nhưng nó rất tốt cho thử nghiệm.{
"dependencies": {
"mongodb": "//github.com/mongodb/node-mongodb-native/archive/gridfs-specification.tar.gz"
}
}
Tải lên một tập tin
Bạn có thể sử dụng GridFs để tải tệp lên MongoDB. Ví dụ này giả định rằng bạn có một tệp có tên
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
1 trong thư mục gốc của dự án của bạn. Bạn có thể sử dụng bất kỳ tệp nào bạn muốn hoặc bạn chỉ có thể tải xuống một meistersinger die mp3.Để sử dụng API phát trực tuyến API, trước tiên bạn cần tạo
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
2.mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
Xô có phương thức
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
3 tạo luồng tải lên cho một tên tệp đã cho. Bạn có thể đặt một nút.js mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
4 Đọc luồng vào luồng tải lên.var assert = require['assert'];
var fs = require['fs'];
var mongodb = require['mongodb'];
var uri = 'mongodb://localhost:27017/test';
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
fs.createReadStream['./meistersinger.mp3'].
pipe[bucket.openUploadStream['meistersinger.mp3']].
on['error', function[error] {
assert.ifError[error];
}].
on['finish', function[] {
console.log['done!'];
process.exit[0];
}];
}];
Giả sử rằng cơ sở dữ liệu
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
5 của bạn trống, bạn sẽ thấy rằng tập lệnh trên đã tạo 2 bộ sưu tập trong cơ sở dữ liệu mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
5 của bạn: mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
7 và mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
8. Bộ sưu tập mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
8 chứa siêu dữ liệu cấp cao về các tệp được lưu trữ trong thùng này. Chẳng hạn, tệp bạn vừa tải lên có một tài liệu trông giống như những gì bạn thấy dưới đây.> db.fs.files.findOne[]
{
"_id" : ObjectId["561fc381e81346c82d6397bb"],
"length" : 27847575,
"chunkSize" : 261120,
"uploadDate" : ISODate["2015-10-15T15:17:21.819Z"],
"md5" : "2459f1cdec4d9af39117c3424326d5e5",
"filename" : "meistersinger.mp3"
}
Tài liệu trên chỉ ra rằng tệp được đặt tên là ‘meistersinger.mp3, và cho bạn biết kích thước của nó bằng byte, khi nó được tải lên và md5 của nội dung. Ngoài ra, còn có một trường
var assert = require['assert'];
var fs = require['fs'];
var mongodb = require['mongodb'];
var uri = 'mongodb://localhost:27017/test';
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
fs.createReadStream['./meistersinger.mp3'].
pipe[bucket.openUploadStream['meistersinger.mp3']].
on['error', function[error] {
assert.ifError[error];
}].
on['finish', function[] {
console.log['done!'];
process.exit[0];
}];
}];
0 chỉ ra rằng tệp được chia thành các khối có kích thước 255 kilobyte, là mặc định.> db.fs.chunks.count[]
107
Không có gì đáng ngạc nhiên, 27847575⁄261120 là khoảng 106,64, do đó, bộ sưu tập
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
7 chứa 106 khối với kích thước 255kb và 1 khối mà khoảng 255kb * 0,64. Mỗi tài liệu khối cá nhân tương tự như tài liệu dưới đây.> db.fs.chunks.findOne[{}, { data: 0 }]
{
"_id" : ObjectId["561fc381e81346c82d6397bc"],
"files_id" : ObjectId["561fc381e81346c82d6397bb"],
"n" : 0
}
Tài liệu chunk theo dõi tệp nào thuộc về và thứ tự của nó trong danh sách các khối. Tài liệu chunk cũng có trường
var assert = require['assert'];
var fs = require['fs'];
var mongodb = require['mongodb'];
var uri = 'mongodb://localhost:27017/test';
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
fs.createReadStream['./meistersinger.mp3'].
pipe[bucket.openUploadStream['meistersinger.mp3']].
on['error', function[error] {
assert.ifError[error];
}].
on['finish', function[] {
console.log['done!'];
process.exit[0];
}];
}];
2 chứa các byte thô của tệp.Bạn có thể định cấu hình cả kích thước chunk và tiền tố
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
4 cho các bộ sưu tập các tệp và khối ở cấp độ xô. Chẳng hạn, nếu bạn chỉ định các tùy chọn var assert = require['assert'];
var fs = require['fs'];
var mongodb = require['mongodb'];
var uri = 'mongodb://localhost:27017/test';
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
fs.createReadStream['./meistersinger.mp3'].
pipe[bucket.openUploadStream['meistersinger.mp3']].
on['error', function[error] {
assert.ifError[error];
}].
on['finish', function[] {
console.log['done!'];
process.exit[0];
}];
}];
4 và var assert = require['assert'];
var fs = require['fs'];
var mongodb = require['mongodb'];
var uri = 'mongodb://localhost:27017/test';
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
fs.createReadStream['./meistersinger.mp3'].
pipe[bucket.openUploadStream['meistersinger.mp3']].
on['error', function[error] {
assert.ifError[error];
}].
on['finish', function[] {
console.log['done!'];
process.exit[0];
}];
}];
5 như được hiển thị bên dưới, bạn sẽ nhận được 27195 khối trong bộ sưu tập var assert = require['assert'];
var fs = require['fs'];
var mongodb = require['mongodb'];
var uri = 'mongodb://localhost:27017/test';
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
fs.createReadStream['./meistersinger.mp3'].
pipe[bucket.openUploadStream['meistersinger.mp3']].
on['error', function[error] {
assert.ifError[error];
}].
on['finish', function[] {
console.log['done!'];
process.exit[0];
}];
}];
6.var bucket = new mongodb.GridFSBucket[db, {
chunkSizeBytes: 1024,
bucketName: 'songs'
}];
fs.createReadStream['./meistersinger.mp3'].
pipe[bucket.openUploadStream['meistersinger.mp3']].
on['error', function[error] {
assert.ifError[error];
}].
on['finish', function[] {
console.log['done!'];
process.exit[0];
}];
Tải xuống một tập tin
Xin chúc mừng, bạn đã tải thành công một tập tin lên MongoDB! Tuy nhiên, một tập tin ngồi trong MongoDB là đặc biệt hữu ích. Để truyền phát tệp vào ổ cứng của bạn, phản hồi HTTP hoặc các mô -đun NPM như loa, bạn sẽ cần một luồng tải xuống. Cách dễ nhất để có được luồng tải xuống là phương thức
var assert = require['assert'];
var fs = require['fs'];
var mongodb = require['mongodb'];
var uri = 'mongodb://localhost:27017/test';
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
fs.createReadStream['./meistersinger.mp3'].
pipe[bucket.openUploadStream['meistersinger.mp3']].
on['error', function[error] {
assert.ifError[error];
}].
on['finish', function[] {
console.log['done!'];
process.exit[0];
}];
}];
7.var bucket = new mongodb.GridFSBucket[db, {
chunkSizeBytes: 1024,
bucketName: 'songs'
}];
bucket.openDownloadStreamByName['meistersinger.mp3'].
pipe[fs.createWriteStream['./output.mp3']].
on['error', function[error] {
assert.ifError[error];
}].
on['finish', function[] {
console.log['done!'];
process.exit[0];
}];
Bây giờ, bạn có một tệp
var assert = require['assert'];
var fs = require['fs'];
var mongodb = require['mongodb'];
var uri = 'mongodb://localhost:27017/test';
mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
fs.createReadStream['./meistersinger.mp3'].
pipe[bucket.openUploadStream['meistersinger.mp3']].
on['error', function[error] {
assert.ifError[error];
}].
on['finish', function[] {
console.log['done!'];
process.exit[0];
}];
}];
8 mà một bản sao của tệp mongodb.MongoClient.connect[uri, function[error, db] {
assert.ifError[error];
var bucket = new mongodb.GridFSBucket[db];
// Use bucket...
}];
1 gốc. Luồng tải xuống cũng cho phép bạn thực hiện một số thủ thuật gọn gàng. Chẳng hạn, bạn có thể cắt bỏ phần đầu của bài hát bằng cách chỉ định một số byte để bỏ qua. Bạn có thể cắt bỏ 41 giây đầu tiên của MP3 và bỏ qua ngay phần hay của bài hát như được hiển thị bên dưới.bucket.openDownloadStreamByName['meistersinger.mp3'].
start[1024 * 1585]. // db.fs.files.findOne[]
{
"_id" : ObjectId["561fc381e81346c82d6397bb"],
"length" : 27847575,
"chunkSize" : 261120,
"uploadDate" : ISODate["2015-10-15T15:17:21.819Z"],
"md5" : "2459f1cdec4d9af39117c3424326d5e5",
"filename" : "meistersinger.mp3"
}
0 đến và từ MongoDB.