Я пытаюсь загрузить изображение, используя multer
и multers3
. Я завернул загрузку Multer в другую функцию. Вместо того, чтобы звонить multer
прямо. Эта функция называется. как показано ниже.
FileHandler. js
var multer = require('multer');
var multerS3 = require('multer-s3');
var fs = require('fs');
var AWS = require('aws-sdk');
AWS.config.update({
endpoint: new AWS.Endpoint('something.digitaloceanspaces.com'),
accessKeyId: 'something',
secretAccessKey: 'something'
});
var spacesHandler = function(){
// Configure client for use with Spaces
this.s3 = new AWS.S3();
}
spacesHandler.prototype.uploadFiles = function (req, res, cb) {
var self = this;
// var item = req.body;
var upload = multer({
storage: multerS3({
s3: self.s3,
bucket: 'prod.bucket1' /*req.params.bucketName*/,
acl: 'public-read',
contentType: multerS3.AUTO_CONTENT_TYPE,
metadata: function (req, file, cb) {
cb(null, { fieldName: file.fieldname });
},
key: function (req, file, cb) {
cb(null, Date.now().toString()+'-'+file.originalname)
}
})
}).single();
upload(req, res, cb);
};
Итак, этот файл возвращает функцию конструктора. Который имеет uploadFiles
метод на своем прототипе. приложение. js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var upload = require('./DO-Spaces-Plugin/FileHandler'); //upload is a constructor here
upload = new upload; // upload is a new object here which has uplodFiles method on its protoype
var app = express();
app.use(upload.uploadFiles, function(req, res){
return res.send('File uploaded!')
});
Не работает, запрос висит на uploadFiles
.
Я думаю, что есть что-то с обратным вызовом внутри uploadFiles.
cb
похоже на следующее, которое передается upload(req, res, cb)
.
Я думаю, что запрос не передается следующее промежуточное ПО (функция обработчика маршрута).
Буду признателен за любую помощь, спасибо.