正如我所看到的,java mongo 驱动程序不提供OutputStream从现有 gridFS 文件获取的功能com.mongodb.gridfs.GridFSFile
我必须GridFSInputFile直接创建或使用gridFs.createFile()方法。
是缺少java驱动还是gridfs的限制?
除了创建新文件/删除旧文件之外,您能否建议任何解决方法?
谢谢
我正在讨论在 Mongo GridFS 或云文件系统中存储图像。由于一些原因,我倾向于云。所使用的语言是 Nginx 服务器上的 PHP。
在 GridFS 中存储图像会增加数据库的大小。因此,更多的数据库必须在内存中,当涉及到分片之类的事情时,我将花费更多的时间/金钱来管理服务器。
从 GridFS 检索图像比云需要更长的时间,因为我必须 a) 使用 id 查询图像 b) 将图像读入内存 c) 使用 php 标头显示图像
云会更好,因为它是直接到云的图像 url。
这些理由听起来合理吗,还是我的想法应该朝着不同的方向发展?
我想知道如果有人想使用GridFS存储文件,最大文件大小是多少?我找不到任何信息,所以任何帮助将不胜感激.
我目前正在我的应用程序中创建一个文件上传系统.我的后端是Sails.js(10.4),它作为我单独的前端(Angular)的API.
我选择将我上传的文件存储到我的MongoDB实例,并使用sails的内置文件上传模块Skipper.我正在使用适配器skipper-gridfs(https://github.com/willhuang85/skipper-gridfs)将文件上传到mongo.
现在,上传文件本身不是问题:我在我的客户端上使用dropzone.js,它将上传的文件发送到/ api/v1/files/upload.文件将上传.
为了实现这一点,我在FileController中使用以下代码:
module.exports = {
upload: function(req, res) {
req.file('uploadfile').upload({
// ...any other options here...
adapter: require('skipper-gridfs'),
uri: 'mongodb://localhost:27017/db_name.files'
}, function(err, files) {
if (err) {
return res.serverError(err);
}
console.log('', files);
return res.json({
message: files.length + ' file(s) uploaded successfully!',
files: files
});
});
}
};
Run Code Online (Sandbox Code Playgroud)
现在问题是:我想在上传文件之前先处理这些文件.特别是两件事:
我不知道从哪里开始或如何实现这种功能.所以任何帮助将不胜感激!
我正在使用Mongo-Java-Driver 2.13我在GridFS 中存储了一个 PDF 文件(大小30mb)。我能够轻松地执行插入、删除和查找操作。
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("testDB");
File pdfFile = new File("/home/dev/abc.pdf");
GridFS gfs = new GridFS(db,"books");
GridFSInputFile inputFile = gfs.createFile(pdfFile);
inputFile.setId("101");
inputFile.put("title", "abc");
inputFile.put("author", "xyz");
inputFile.save();
Run Code Online (Sandbox Code Playgroud)
数据在坚持books.files和books.chunks收藏。现在我想更新:
如何在 GridFS 中为案例 1执行这些更新操作?
我开始知道我需要维护我的文件的多个版本并选择正确的版本。有人可以澄清一下吗?
编辑:
我可以轻松更新元数据(标题、作者)。
GridFSDBFile outputFile = gfs.findOne(new BasicDBObject("_id", 101));
BasicDBObject updatedMetadata = new BasicDBObject();
updatedMetadata.put("name", "PG");
updatedMetadata.put("age", 22);
outputFile.setMetaData(newMetadata);
outputFile.save();
Run Code Online (Sandbox Code Playgroud) 我可以使用 GridFSBucket 的 openDownloadStream 上传文件,并看到该文件已上传并在ongs.files 块下可见。但由于某种原因,在尝试下载时出现以下错误 -
Caught exception: Error: FileNotFound: file def1.txt was not found
Run Code Online (Sandbox Code Playgroud)
我的代码是 -
var express = require('express');
var gridModule = express.Router();
var mongoose = require('mongoose');
var fs = require('fs');
gridModule.post('/', (req, res) => {
console.log("::::grid");
//const gridfs = new mongoose.mongo.GridFSBucket(mongoose.connection.db);
//const writeStream = gridfs.openUploadStream('test.dat');
var gridfs = new mongoose.mongo.GridFSBucket(mongoose.connection.db, {
chunkSizeBytes: 1024,
bucketName: 'songs'
});
fs.createReadStream('./def.txt').
pipe(gridfs.openUploadStream('def1.txt')).
on('error', function (error) {
assert.ifError(error);
}).
on('finish', function () {
console.log('done!');
process.exit(0);
});
});
gridModule.get('/', (req, res) => …Run Code Online (Sandbox Code Playgroud) 所以我试图为 GridFS 集合创建一个猫鼬模型,但没有成功。
let bucket;
(async () => {
try {
await mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true });
const { db } = mongoose.connection;
bucket = new mongoose.mongo.GridFSBucket(db, { bucketName: 'tracks' });
}
catch(err) {
console.log(err);
}
})();
Run Code Online (Sandbox Code Playgroud)
这是我的课程架构和模型:
const courseSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
tracks: [{
type: mongoose.Types.ObjectId,
ref: 'tracks.files'
}],
});
const Course = mongoose.model('Course', courseSchema);
Run Code Online (Sandbox Code Playgroud)
这是我的曲目模式和模型:
const trackSchema = new mongoose.Schema({
length: { type: Number },
chunkSize: { type: Number },
uploadDate: …Run Code Online (Sandbox Code Playgroud) 我收到以下提到的错误。基本配置如下: 我已将文件上传到服务器上,我想下载它们,但收到这些错误时,我向 /api/files/delete/${fileId} 调用了 POST 请求,该请求应该调用路由并返回文件发送到浏览器,而不是使用网格相关模块获取错误。
MONGODB_CONNECTION_STRING = mongodb://localhost:27017/Cstore
Db structure={Cstore:{uploads.files,uploads.chunks,users}}
On requesting POST axios.post(`/api/files/delete/${fileId}`)
Getting error:
this._store = new grid.mongo.GridStore(grid.db, this.id || new grid.mongo.ObjectID(), this.name, this.mode, options);
[0] ^
[0]
[0] TypeError: grid.mongo.GridStore is not a constructor
[0] at new GridReadStream (/home/lenovo/Desktop/react/cstore/node_modules/gridfs-stream/lib/readstream.js:68:17)
This is server.js
app.get('/image/:filename', (req, res) => {
gfs.files.findOne({
_id: mongoose.Types.ObjectId(req.params.filename)
// filename: req.params.filename.toString()
}, (err, file) => {
// Check if file
if (!file || file.length === 0) {
console.log("not found")
return res.status(404).json({
err: 'No file …Run Code Online (Sandbox Code Playgroud) 我在文件元数据中存储了一些额外的细节.我正试图弄清楚如何使用c#官方驱动程序查询它.
任何帮助将不胜感激.
我试图在GridFS中保存项目及其文件.我想首先保存项目并使用项目的"_id"作为我要保存文件的文件的元数据.当我尝试这样我得到ENOENT时,打开'/ tmp/45e85388793de'错误.这是我的代码
newProject.save(function (err,project) {
if (err) {
console.log('save error', err);
}
console.log("project added");
var id=poject._id;
var filepath = req.files.file.path;
var filename = req.files.file.name;
var writestream = gfs.createWriteStream({ filename: filename, metadata:id });
console.log(filepath);
fs.createReadStream(filepath)
.on('end', function() {
})
.on('error', function(err) {
console.log("error encountered"+err);//ENOENT,open error
})
.pipe(writestream);
});
Run Code Online (Sandbox Code Playgroud)
为什么我收到此错误以及如何解决?
gridfs ×10
mongodb ×9
node.js ×4
mongoose ×3
java ×2
mongodb-java ×2
c# ×1
cloud ×1
file-upload ×1
filestream ×1
php ×1
sails.js ×1
skipper ×1