@@ -191,18 +191,13 @@ export const createModels = () => {
191
191
* Image.find((error, files) => { ... });
192
192
*
193
193
*/
194
- export const modelFor = bucket => {
194
+ export const modelFor = ( bucket = 'fs' ) => {
195
195
// create models
196
196
const models = createModels ( ) ;
197
197
198
- // use default bucket options
199
- let bucketInfo = Buckets . File ;
200
-
201
- // obtain options for specified bucket
202
- bucketInfo = find ( values ( Buckets ) , { bucketName : bucket } ) || bucketInfo ;
203
-
204
198
// obtain model name for specified bucket
205
- const { modelName } = bucketInfo ;
199
+ const { modelName } =
200
+ find ( values ( Buckets ) , { bucketName : bucket } ) || Buckets . File ;
206
201
207
202
// obtain GridFS model instace for specified bucket
208
203
const Model = get ( models , modelName ) ;
@@ -233,18 +228,13 @@ export const modelFor = bucket => {
233
228
* images.unlink(_id, (error, _id) => { ... });
234
229
*
235
230
*/
236
- export const bucketFor = bucket => {
231
+ export const bucketFor = ( bucket = 'fs' ) => {
237
232
// create buckets
238
233
const buckets = createBuckets ( ) ;
239
234
240
- // use default bucket options
241
- let bucketInfo = Buckets . File ;
242
-
243
235
// obtain options for specified bucket
244
- bucketInfo = find ( values ( Buckets ) , { bucketName : bucket } ) || bucketInfo ;
245
-
246
- // obtain real bucket name for specified bucket
247
- const { bucketName } = bucketInfo ;
236
+ const { bucketName } =
237
+ find ( values ( Buckets ) , { bucketName : bucket } ) || Buckets . File ;
248
238
249
239
// obtain GridFSBucket instance
250
240
const Bucket = get ( buckets , bucketName ) || buckets . files ;
@@ -259,16 +249,22 @@ export const uploaderFor = (/* ...bucket */) => (request, response, next) => {
259
249
260
250
// obtain bucket options
261
251
const { field, bucketName } =
262
- find ( Buckets , { bucketName : bucket } ) || Buckets . File ;
252
+ find ( values ( Buckets ) , { bucketName : bucket } ) || Buckets . File ;
263
253
264
254
// obtain GridFSBucket storage
265
255
const storage = bucketFor ( bucketName ) ;
266
256
267
257
// obtain model for the bucket
268
258
const File = modelFor ( bucketName ) ;
269
259
260
+ // const file filter
261
+ const fileFilter = ( req , file , cb ) => {
262
+ const isAllowed = file && file . fieldname === field ;
263
+ cb ( null , isAllowed ) ;
264
+ } ;
265
+
270
266
// create multer uploader
271
- const upload = multer ( { storage } ) . single ( field ) ;
267
+ const upload = multer ( { storage, fileFilter } ) . any ( ) ;
272
268
273
269
// do upload
274
270
upload ( request , response , error => {
@@ -278,9 +274,9 @@ export const uploaderFor = (/* ...bucket */) => (request, response, next) => {
278
274
}
279
275
280
276
// extend request with file instance
281
- if ( request . file && request . file . fieldname === field ) {
277
+ if ( request . files ) {
282
278
// create file instance
283
- const file = new File ( request . file ) ;
279
+ const file = new File ( request . files [ 0 ] ) ;
284
280
285
281
// set file to request
286
282
request . file = file ;
0 commit comments