Rails 3去除金属?
我正在尝试实现Mongoid,Carrierwave和grid_fs.
我遵循了指南1.
但是,我已经读过Rails 3正在删除Metal(http://github.com/rails/rails/commit/ed34652d1aca148fea61c5309c1bd5ff3a55abfa).
所以我偶然发现了这篇文章:指南2
考虑到Rails 3可能会移除Metal以及将来维护的情况.哪个指南更适合让grid_fs,Mongoid和Carrierwave一起工作?
我需要为大多数不到16MB的文件创建一个存储系统,但我想要GridFS的好处,如版本控制,自定义元数据,轻松备份(使用mongodump)等等.我想说我的文件可能有10%会结束16MB因此我不能依赖于存储在单个文档中,并且我不想为我正在寻找的好处重新创建API.我也在使用mongoDB系统.
我应该使用GridFS吗?
我正在使用mongoose和gridfs-stream来存储和读取mongodb中的文件.我在这里的例子:https://github.com/aheckmann/gridfs-stream
将文件写入数据库工作正常,但我遇到了读取文件的问题.
mongodb看起来是什么(显示收藏)
fs.chunks
fs.files
Run Code Online (Sandbox Code Playgroud)
文件索引的外观(db.fs.files.find())
{ "_id" : ObjectId("5140392659851df70b000001"),
"filename" : "cover",
"contentType" : "binary/octet-stream",
"length" : 85734,
"chunkSize" : 262144,
"uploadDate" : ISODate("2013-03-13T08:30:30.299Z"),
"aliases" : null,
"metadata" : null,
"md5" : "4476b26067daa0677978ba501308a35d" }
Run Code Online (Sandbox Code Playgroud)
然后我使用此代码获取名为"cover"的文件
...
var gfs = Grid(mongoose.connection.db, mongoose.mongo)
var readstream = gfs.createReadStream('cover')
Run Code Online (Sandbox Code Playgroud)
发生错误:
Error: cover does not exist
at self.collection.self.fileId (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/gridstore.js:198:26)
at Cursor.nextObject (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js:654:35)
at Cursor.close (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js:960:5)
at Cursor.nextObject (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js:654:17)
at Cursor.nextObject.commandHandler (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js:631:14)
at Db._executeQueryCommand (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:1702:5)
at g (events.js:185:14)
at EventEmitter.emit (events.js:115:20)
at …Run Code Online (Sandbox Code Playgroud) 我有以下代码
gridfs.js具有以下编写文件字节的代码
exports.putFile = function(path, name, options, fn) {
var db;
db = mongoose.connection.db;
options = parse(options);
options.metadata.filename = name;
return new GridStore(db, name, "w", options).open(function(err, file) {
if (err) {
return fn(err);
}
return file.writeFile(path, fn);
});
};
Run Code Online (Sandbox Code Playgroud)
猫鼬模式定义如下.mongoose模式具有文件名和文件本身.
var fs = require('fs');
var mongoose = require('mongoose');
var db = mongoose.connection;
var gridfs = require('./gridfs');
var Schema = mongoose.Schema;
var trackDocsSchema = mongoose.Schema(
{
_id : Schema.Types.ObjectId,
docName: 'string',
files: [ mongoose.Schema.Mixed ]
}
);
trackDocsSchema.methods.addFile = function(file, options, …Run Code Online (Sandbox Code Playgroud) 我有来自mongoDB的以下带有图像的JSON,但我不知道如何显示它:
fs.chunks:
{
"_id" : ObjectId("542e684a8a1cec178a172673"),
"n" : 1,
"data" : BinData(0,"2N6DSSfbCN/LLacNDYrJUQDEZgimMUwFpQGoJP0RU19Bi4PM82DjrUnKhE/P9v7P8ZveD1oDpFBM0iml9NE3WQmAvYFoG+nhD73Jm4N9b4LpylaAN5Ef+gVdgGSTAfSUwOikXoVick5pSQCkRmTCU5NT9VVfjHdAx74/ZhFRj+TIRjzlAhzkACBElzgMwGCo7tX+FYrpQLJ5KRmXiwFFwsNtHHzXiK1eu+CG1FumhGpA/qdG8CdDgD1xUHEcerMGO/eLGR9ML7ni/VjXxWzqp2j5DG2/WuKNv7xd3Kz/vr0MctJhuaBIl35YrKhdLnzqDa0uDa6bm4jz+eNyAI2hQbayGo4kVPFe8W7wFpY7qfBvnB9kbocxfZSdADDUNwYaydpT8lIcKEN9XfQJOYZvHp0El"),
"files_id" : ObjectId("542e684a8a1cec178a172671")
}
fs.files:
{
"_id" : ObjectId("542e65378axdeckhb0"),
"uploadDate" : ISODate("2012-11-01"),
"length" : 15673,
"chunkSize" : 33222,
"md5" : "f66e6654854a28e3672cfhds334d223b55a1"
}
Run Code Online (Sandbox Code Playgroud)
需要将“数据”转换为真实图像才能显示。
我正在使用nodeJS,但找不到很好的教程来通过GridFS从mongoDB检索图像。
谢谢你的帮助!
我正在使用MongoDB 3.2和Java 1.8版本以及mongo-java驱动程序。我已将图像保存在数据库中。我能够保存图像,读取图像并读取所有图像。现在我想更新GridFS中的图像。如果图像名称相同,我想覆盖图像。当我尝试用相同的名称保存图像时,我得到了两个图像。我正在使用以下代码保存图像。
GridFSBucket gridFSBucket = GridFSBuckets.create(database, imageCollection);
InputStream streamToUploadFrom = new FileInputStream(new File(imageFileName));
GridFSUploadOptions options = new GridFSUploadOptions()
.metadata(new Document("type", "brand").append("name", name).append("uuid", UUID.randomUUID().toString()));
ObjectId fileId = gridFSBucket.uploadFromStream(name, streamToUploadFrom, options)
Run Code Online (Sandbox Code Playgroud)
谁能指导我找到任何特定的文档链接/解决方法,以便我可以覆盖/更新图像。
我在服务器上使用GridFS存储Word(.docx)文件.我希望能够使用docx-builder NPM包将文档合并到一个Word文件中.
这是我上传文件的方式:
Meteor.methods({
uploadFiles: function (files) {
check(files, [Object]);
if (files.length < 1)
throw new Meteor.Error("invalid-files", "No files were uploaded");
var documentPaths = [];
_.each(files, function (file) {
ActivityFiles.insert(file, function (error, fileObj) {
if (error) {
console.log("Could not upload file");
} else {
documentPaths.push("/cfs/files/activities/" + fileObj._id);
}
});
});
return documentPaths;
}
})
Run Code Online (Sandbox Code Playgroud)
我怎样才能在服务器端执行此操作?我只能做这个服务器端因为我正在使用的fs包需要无法在客户端执行的包.
这就是我目前正在努力解决这个问题的方法.从客户端,我正在调用以下方法(声明为a Meteor.method):
print: function(programId) {
// Get the program by ID.
var program = Programs.findOne(programId);
// Create a new …Run Code Online (Sandbox Code Playgroud) 是否有可能增加ActiveStorage 在rails 6不增加ActiveRecord
我使用的只有API应用程序mongoDB的数据库。现在,正如我所观察到的那样,FSGrid这实际上是一个不错的选择,它存在数据库大小问题,并且我们希望在上可以使用物理文件S3。
activerecord amazon-s3 gridfs rails-activestorage ruby-on-rails-6
我处理包含数字和文本的大型数据帧。显然我可以将每列/行存储为一个 sep。我的 mongoDB 中的文档,但我想在加载数据时删除和麻烦。
我考虑过使用 GridFS,它是通过使用 MongoEngine FileField 进行抽象的。与此同时,我想出了一个适合我的解决方案:
import pandas as pd
from mongoengine import Document, StringField, FileField
from io import BytesIO
class Frame(Document):
name = StringField(required=True, max_length=200, unique=True)
data = FileField()
@property
def frame(self):
str_data = BytesIO(self.data.read()).read().decode()
try:
return pd.read_json(str_data, typ="frame")
except ValueError:
return pd.read_json(str_data, typ="series")
def __str__(self):
return "{name}: \n{frame}".format(name=self.name, frame=self.frame)
def put(self, frame):
if self.data:
self.data.replace(frame.to_json().encode())
else:
self.data.new_file()
self.data.write(frame.to_json().encode())
self.data.close()
self.save()
if __name__ == '__main__':
from pydata.config import connect_production
connect_production()
frame = pd.DataFrame(data=[[1,2,4],[3,4,6]], columns=["A","B","C"], index=["X","Y"])
f …Run Code Online (Sandbox Code Playgroud) 嗨,我目前正在使用 Python Flask 来存储我的图像,我已经成功地使用 gridfs 将图像存储到 mongodb 中,但现在我不确定如何检索图像。
我知道由于文件很大,它将在 fs.chunks 中分成块。我可以查询结果,因为我为所有图像创建了一个 id 并将其附加到 fs.files,我将只使用 objectID 来查询我的 fs.chunks 集合。然而,在那之后我不知道如何显示图像。
有谁知道如何从 mongodb 的 gridfs 中为 python flask 检索图像。
gridfs ×10
mongodb ×7
node.js ×4
mongoose ×3
activerecord ×1
amazon-s3 ×1
file ×1
flask ×1
java ×1
javascript ×1
meteor ×1
mongoengine ×1
mongoid ×1
pandas ×1
python ×1
python-3.x ×1
server ×1
storage ×1
versioning ×1