使用gridfs-stream,查找和获取文件时如何指定bucket名称?
我的问题是在如何指定 GridFS 存储桶的stackoverflow 上找到的以下问题的后续问题
那里的解决方案提供了一个示例,说明如何在调用 createWriteStream 时指定存储桶。根据@vsivsi 提供的代码,我可以使用以下代码中的“root”选项将文件添加到我的自定义存储桶中:
// fyi, req.file has been populated using multer
var gfs = Grid(mongoose.connection.db);
var writeStream = gfs.createWriteStream({
filename: req.file.originalname,
mode: 'w',
content_type: req.file.mimetype,
root: 'private'
});
Run Code Online (Sandbox Code Playgroud)
这成功地将我的文件添加到 private.files 和 private.chunks。所以现在我想查找并阅读我上传的文件。我的 find() 不使用存储桶,如下所示:
var gfs = Grid(mongoose.connection.db);
gfs.find({
filename: req.params.filename
}).toArray(function(err, files){
// bunch of processing here...
});
Run Code Online (Sandbox Code Playgroud)
现在我如何知道要查询哪个存储桶/根?
我假设在调用 createReadStream() 时我将能够使用相同的“root”选项,但首先我需要找到它。有没有办法告诉 gridfs-stream 使用哪个存储桶/根?
Put与和一起使用时导致的操作Type和Attribute错误。然而,同样的操作通过utility.Appreciate 指针传递。MongoClientGridFSmongofiles
版本信息
[xxxx@yyyy ~]$ python
Python 3.5.1 (default, Jan 20 2018, 19:04:00)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux
Type "help", "copyright", "credits" or "license" for more information.
[xxxx@yyyy ~]$ mongo
MongoDB shell version v3.6.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.1
>>> pymongo.version
'3.6.0'
Run Code Online (Sandbox Code Playgroud)
代码
>>> from pymongo import MongoClient
>>> from gridfs import GridFS
>>> from bson import objectid
>>> db = MongoClient().test
>>> fs = GridFS(db)
>>> …Run Code Online (Sandbox Code Playgroud) 我正在尝试删除 .files 和 .chunk 数据,但我发现的所有帖子要么已经过时,要么不适用于我的问题。
这是我的后端路线:
const mongoose = require("mongoose");
const config = require("config");
const db = config.get("mongoURI");
let gfs;
const conn = mongoose.createConnection(db);
conn.once("open", () => {
gfs = new mongoose.mongo.GridFSBucket(conn.db, {
bucketName: "photos"
});
});
router.delete('/:imageID', async (req, res) => {
gfs.delete({_id: req.params.imageID, root:"photos"}, function(error){
test.equal(error, null);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在使用gridfs-stream https://github.com/aheckmann/gridfs-stream&当前我正在显示来自gridFS的图像。
当读取数据时,它给出以下输出。当我将此数据附加到时<img src="data:image/jpeg;base64,(data)">,图像不会显示。
gfs
// create a read stream from gfs...
.createReadStream({ filename: 'error1.png' })
// and pipe it to Express' response
.pipe(res);
Run Code Online (Sandbox Code Playgroud)
输出res:-

编辑:-
我试过了:-
img.src = 'data:image/jpeg;base64,' + btoa(res);
Run Code Online (Sandbox Code Playgroud)
呈现的输出是:-
<img src="data:image/jpeg;base64,W29iamVjdCBPYmplY3Rd">
Run Code Online (Sandbox Code Playgroud)
没有显示图片。
我使用以下命令行将数据插入GridFS:
mongofiles --host localhost:27017 --db testmongo --collection files put D:/text.txt
Run Code Online (Sandbox Code Playgroud)
它有像_id filename chunkSize uploadDate md5 length这样的字段.
如何使用cmd或Java添加自己的字段?
我正在开发一个 go 项目,我需要提供存储在 mongodb 中的文件。这些文件存储在 GridF 中。我使用 gopkg.in/mgo.v2 作为包来连接和查询数据库。
我可以从数据库检索文件,这并不难。
f, err := s.files.OpenId(id)
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能通过 http 来提供该文件呢?我使用 JulienSchmidt 路由器来处理所有其他剩余请求。我找到的解决方案始终使用静态文件,而不是数据库中的文件。
提前致谢
我想使用 PYMonbgo 和 gridfs 将 PDF 文件存储在我的 MongoDB 数据库(在 Ubuntu 中)中。但我收到错误“utf-8”编解码器无法解码位置 10 中的字节 0xe2:无效的连续字节
如何在 MongoDB 中使用 python 存储和接收 PDF?
from pymongo import MongoClient
import gridfs
db = MongoClient('mongodb://localhost:27017/').myDB
fs = gridfs.GridFS( db )
fileID = fs.put( open(('Test.pdf') ))
out = fs.get(fileID)
Run Code Online (Sandbox Code Playgroud) 我们必须存储大约1300万个文件并对文件执行一些标准操作.我们正在使用Windows.第一个问题是我们可以将它存储在文件系统中吗?文件总大小约为6000 TB.我正在检查MongoDB上的gridfs.我不知道这是不是一个好方法.我们将在服务器端使用Java.
如果它可以舒适地存储这些文件,那么获取文件并将其提供给用户以及文件重命名,元数据更新等操作的性能如何.
我们还需要稍后将所有文件备份到辅助文件系统存储.但gridfs中的文件将以块的形式存储.所以问题是我们如何快速获取所有这些文件并将其发送到辅助文件系统.
请让我知道我应采取的方法.
我遇到了麻烦,尝试使用CarrierWave在Rails 3中开发的文件上传Rest API,使用MongoDB数据库.
我想要做的是使用MongoDB系统GridFS存储一些文件(不仅是图像,而且是每种文件格式).我阅读了许多建议我使用CarrierWave gem的文档.
但是当我尝试配置它时出错.
我的开发环境:Gemfile:
source 'https://rubygems.org'
gem 'rails', '3.2.8'
# MongoDB
gem 'mongoid', :git => 'git://github.com/mongoid/mongoid.git'
gem 'carrierwave', :git => "git://github.com/jnicklas/carrierwave.git"
# gem 'carrierwave-mongoid', :require => 'carrierwave/mongoid'
gem 'mini_magick', :git => 'git://github.com/probablycorey/mini_magick.git'
gem 'bson_ext'
gem 'json'
Run Code Online (Sandbox Code Playgroud)
application.rb:
require File.expand_path('../boot', __FILE__)
# ActiveRecord will not be use with MongoDB
# require 'rails/all'
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"
require "sprockets/railtie"
require "mongoid/railtie"
require "carrierwave"
# require "carrierwave/mongoid"
Run Code Online (Sandbox Code Playgroud)
我用mongoid.yml(config/mongoid.yml)文件定义数据库:
development:
sessions:
default:
database: lf_rest_api_development
hosts:
- localhost:27017 …Run Code Online (Sandbox Code Playgroud) 最近我一直在努力研究如何使用mongoose列出GridFs集合的所有元数据.我试过用这个
var mongoose = require('mongoose');
public.schema = {
filename : { type: String, required: true },
contentType : { type: String, required: true },
length : { type: Number, required: true },
chunkSize : { type: Number, required: true },
uploadDate : { type: Date, required: true },
aliases : { type: String, required: false },
metadata : { type: String, required: false },
md5 : { type: String, required: true }
};
var schema = mongoose.Schema;
this.store = mongoose.model('file.files', …Run Code Online (Sandbox Code Playgroud)