У вас есть конфликтующий код:
const upload = multer({ dest: 'uploads/' });
Если вы хотите file.buffer
, вам нужно импортировать без dest
, например:
const upload = multer({});
Ваш импорт подразумевает DiskStorage
, но multer определяет buffer
только для файлов, использующих MemoryStorage
:
function Multer (options) {
if (options.storage) {
this.storage = options.storage
} else if (options.dest) {
this.storage = diskStorage({ destination: options.dest })
} else {
this.storage = memoryStorage()
}
this.limits = options.limits
this.preservePath = options.preservePath
this.fileFilter = options.fileFilter || allowAll
}
См. код выбора хранилища мультера и MemoryStorage .
При достаточном количестве операций вы могли бы мультиплексировать хранилища, возможно, написав свой собственный композитный мультиплексор хранения:
class StorageMultiplexer {
constructor(...storageBackends) {
this._storages = storageBackends;
}
_handleFile(req, file, cb) {
this._storages.forEach(s => s._handleFile(req, file, cb));
}
_removeFile(req, file, cb) {
this._storages.forEach(s => s._removeFile(req, file, cb));
}
}
var diskStorage = require('./storage/disk')
var memoryStorage = require('./storage/memory')
const upload = multer({
dest: 'uploads/',
storage: new StorageMultiplexer(diskStorage, memoryStorage)
});
Этот код не тестировался и является просто демонстрацией
Пожалуйста, прочитайте StorageEngine.md для получения дополнительной информации.