Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor CollectionFS:对同一个集合使用多个存储将导致错误_Javascript_Meteor_Amazon S3_Graphicsmagick_Collectionfs - Fatal编程技术网

Javascript Meteor CollectionFS:对同一个集合使用多个存储将导致错误

Javascript Meteor CollectionFS:对同一个集合使用多个存储将导致错误,javascript,meteor,amazon-s3,graphicsmagick,collectionfs,Javascript,Meteor,Amazon S3,Graphicsmagick,Collectionfs,我正在使用CfS将一些图像上传到AmazonS3。因此,我有两个存储:原始文件和缩略图。对于原始文件,我添加了图像的尺寸,缩略图的大小调整为96px的正方形图像。这很有效 var original = new FS.Store.S3("original", { accessKeyId: "XXX", secretAccessKey: "XXX", bucket: "XXX", folder: "original", transformWrite: fun

我正在使用CfS将一些图像上传到AmazonS3。因此,我有两个存储:原始文件和缩略图。对于原始文件,我添加了图像的尺寸,缩略图的大小调整为96px的正方形图像。这很有效

var original = new FS.Store.S3("original", {
    accessKeyId: "XXX",
    secretAccessKey: "XXX",
    bucket: "XXX",
    folder: "original",

    transformWrite: function (fileObj, readStream, writeStream) {
        readStream.pipe(writeStream);
        var transformer = gm(readStream, fileObj.name());
        transformer.size({bufferStream: true}, FS.Utility.safeCallback(function (err, size) {
            if (!err) fileObj.update({$set: {'metadata.orgWidth': size.width, 'metadata.orgHeight': size.height}});
        }));
    }           
});

var thumbnail = new FS.Store.S3("thumbnail", { 
    accessKeyId: "XXX",
    secretAccessKey: "XXX",
    bucket: "XXX",
    folder: "thumbnail",

    // Create squared thumbnail
    transformWrite: function (fileObj, readStream, writeStream) {
        var size = '96';
        gm(readStream, fileObj.name()).autoOrient().resize(size, size + '^').gravity('Center').extent(size, size).stream().pipe(writeStream);
    } 
});

Images = new FS.Collection("images", {
    stores: [ original, thumbnail ]
});
现在,我需要两个相同的图像商店:一个“工作”图像和一个“公共”图像。工作图像用于图像维护/编辑,如像素化、去饱和等(您始终可以通过复制原始存储文件进行重置)和公共图像,公共图像将使用工作图像,但如果其宽度大于此值,则将其调整为900px

用户将只看到公共图像,编辑器正在处理工作图像。这就是我想做的

所以我增加了两个商店:

var working = new FS.Store.S3("main", {
    accessKeyId: "XXX",
    secretAccessKey: "XXX",
    bucket: "XXX",
    folder: "working",

    transformWrite: function (fileObj, readStream, writeStream) {
        readStream.pipe(writeStream);
        var transformer = gm(readStream, fileObj.name());
        transformer.size({bufferStream: true}, FS.Utility.safeCallback(function (err, size) {
            if (!err) fileObj.update({$set: {'metadata.width': size.width, 'metadata.height': size.height}});
        }));
    }
});

var public = new FS.Store.S3("public", {
    accessKeyId: "XXX",
    secretAccessKey: "XXX",
    bucket: "XXX",
    folder: "public",
    // Do resize to 900px, if image is larger then this
    transformWrite: function (fileObj, readStream, writeStream) { 
        var transformer = gm(readStream, fileObj.name());
        transformer.size({bufferStream: true}, FS.Utility.safeCallback(function (error, size) {
            if (error) console.warn(error);
            else {
                if(size.width > 900) transformer.resize('900').stream().pipe(writeStream);
                else transformer.stream().pipe(writeStream);
            }
        }));
    }
}); 

Images = new FS.Collection("images", {
    stores: [ original, working, public, thumbnail ]
});
基本上,工作存储区与原始存储区相同-通过上传,两者相同。公共存储应始终是工作图像的副本,最大宽度为900px

但是如果我加上这两个商店,有时上传和服务器会崩溃。在日志中我发现了错误

/docker/xxx/bundle/programs/server/npm/cfs_gridfs/node_modules/mongodb/lib/mongodb/connection/base.js:246
    throw message;      
          ^
Error: 56e715494166660700edb9c3 does not exist

我只是很惊讶为什么只有在我添加了工作商店和公共商店的情况下才会发生这种情况。那么这有什么问题吗?

您找到解决方案了吗?我正在处理一个类似的问题。当您同时上载多个文件时,似乎会发生这种情况。问题可能发生在
pipe()
方法上。任何类型的错误都应该是。我离开了cfs(现在已经不推荐了),因为有一个架构错误。在我的例子中,大多数用户都会遇到这个问题,如果他们使用的是不同的mongoDB(应该在生产环境中使用)。这就是为什么所有东西都在本地工作,而不是在高效服务器上工作。