CollectionFS S3 ERROR STREAM images Доступ запрещен
Я пытаюсь настроить CollectionFS и S3, чтобы я мог загружать файлы в S3 из AutoForm.
У меня есть изображения FS.Collection, определенные с .allow
Функция живет на сервере, вот так:
// Client and server.
var imageStore = new FS.Store.S3('images', {
region: 'us-east-1',
accessKeyId: 'mykey',
secretAccessKey: 'my/key',
bucket: 'buketz',
folder: 'images',
});
Images = new FS.Collection('images', {
stores: [imageStore],
filter: {
allow: {
contentTypes: ['image/*'],
extensions: ['png', 'PNG', 'jpg', 'JPG', 'jpeg', 'JPEG']
}
}
});
// Server only.
Images.allow({
insert: function (userId, image) {
return true;
},
update: function (userId, image) {
return true;
},
remove: function (userId, image) {
return true;
},
download: function (userId, image) {
return true;
}
});
Теперь, когда я загружаю приложение, Meteor выдает мне эту ошибку:
/Users/pcoffey/.meteor/packages/cfs_s3/.0.1.3.1ba5bia++os+web.browser+web.cordova/npm/node_modules/aws-sdk/lib/request.js:32
throw err;
^
Error: Error storing file to the images store: Access Denied
at [object Object].<anonymous> (packages/cfs:collection/common.js:88:1)
at [object Object].emit (events.js:106:17)
at Writable.<anonymous> (packages/cfs:storage-adapter/storageAdapter.server.js:212:1)
at Writable.emit (events.js:117:20)
at Response.<anonymous> (packages/cfs:s3/s3.upload.stream2.js:178:1)
at Request.<anonymous> (/Users/pcoffey/.meteor/packages/cfs_s3/.0.1.3.1ba5bia++os+web.browser+web.cordova/npm/node_modules/aws-sdk/lib/request.js:350:18)
at Request.callListeners (/Users/pcoffey/.meteor/packages/cfs_s3/.0.1.3.1ba5bia++os+web.browser+web.cordova/npm/node_modules/aws-sdk/lib/sequential_executor.js:100:18)
at Request.emit (/Users/pcoffey/.meteor/packages/cfs_s3/.0.1.3.1ba5bia++os+web.browser+web.cordova/npm/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/Users/pcoffey/.meteor/packages/cfs_s3/.0.1.3.1ba5bia++os+web.browser+web.cordova/npm/node_modules/aws-sdk/lib/request.js:604:14)
at Request.transition (/Users/pcoffey/.meteor/packages/cfs_s3/.0.1.3.1ba5bia++os+web.browser+web.cordova/npm/node_modules/aws-sdk/lib/request.js:21:12)
Exited with code: 8
настройка FS.debug
в true
возвращает эту ошибку:
FileWorker ADDED - calling saveCopy images for o5pjjrGD9AfHJwHZG
saving to store images
createWriteStream images, internal: false
createWriteStreamForFileKey images
Meteor._wrapAsync has been renamed to Meteor.wrapAsync
TempStore is mounted on storage.gridfs
FS.TempStore creating read stream for o5pjjrGD9AfHJwHZG
createReadStream _tempstore
createReadStreamForFileKey _tempstore
GRIDFS { _id: 5584b2140cac49f4312c1425, root: 'cfs_gridfs._tempstore' }
FS.HTTP.unmount:
{}
Registered HTTP method URLs:
/cfs/files/:collectionName/:id/:filename
/cfs/files/:collectionName/:id
/cfs/files/:collectionName
=> Meteor server restarted
-----------ERROR STREAM images Access Denied
-----------ERROR STREAM images Access Denied
Если я изменю имя коллекции, она будет временно загружена, но как только я попытаюсь загрузить файл, снова появится ошибка. У кого-нибудь есть идеи относительно того, что может быть причиной этой проблемы?
2 ответа
Я получил такую настройку, которая очень хорошо работает для меня. Я использую следующие пакеты:
cfs:standard-packages
cfs:filesystem
cfs:s3
cfs:graphicsmagick
// Клиентский код
var companyLogoStore = new FS.Store.S3( "companyLogo" );
Images = new FS.Collection( "images", {
stores: [ companyLogoStore ],
filter: {
maxSize: 5242880, // in bytes
allow: {
contentTypes: [ 'image/*' ],
extensions: [ 'png', 'bmp', 'jpeg', 'gif', 'webp', 'jpg' ]
}
},
onInvalid: function ( message ) {
if ( Meteor.isClient ) {
Alerts.add( message, 'danger' );
} else {
console.log( message );
}
}
} );
// Серверный код
var companyLogoStore = new FS.Store.S3("companyLogo", {
region: "xxxxxx",
accessKeyId: "xxxxxxx",
secretAccessKey: "xxxxxxxx",
bucket: "xxxxxxx",
ACL: "public-read", **//optional, default is 'private', but you can allow public or secure access routed through your app URL**
fileKeyMaker: function (fileObj) {
return 'uploads/company/' + fileObj.original.name;
},
transformWrite: function(fileObj, readStream, writeStream) {
gm(readStream, fileObj.name()).resize('210', '210').stream().pipe(writeStream);
},
maxTries: 3 //optional, default 5
});
Также я использую ongoworks: пакет безопасности для разрешений
Images.files.permit(['insert','update','remove']).ifHasRole(['admin', 'manager']).apply();