.
This commit is contained in:
parent
86446f2bd3
commit
3caa814dd2
@ -1,10 +1,43 @@
|
||||
var multer = require('multer');
|
||||
var mkdirp = require('mkdirp');
|
||||
var config = require('../config');
|
||||
|
||||
/*var upload = function (path) {
|
||||
return multer({storage: storage(path)});
|
||||
};*/
|
||||
var upload = multer({
|
||||
var memoryUpload = multer({
|
||||
storage: multer.memoryStorage()
|
||||
});
|
||||
|
||||
module.exports = upload;
|
||||
var makePath = function(path) {
|
||||
mkdirp(path, function (err) {
|
||||
if (err) throw err
|
||||
else return true;
|
||||
});
|
||||
}
|
||||
|
||||
var cdnStorage = function(path) {
|
||||
return multer.diskStorage({
|
||||
destination: function (req, file, cb) {
|
||||
console.log(req);
|
||||
console.log(file);
|
||||
cb(null, path)
|
||||
},
|
||||
filename: function (req, file, cb) {
|
||||
cb(null, file.originalname)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var cdnUpload = function() {
|
||||
var _date = new Date();
|
||||
var pathWithDate = config.uploads.path + '/' + _date.getFullYear() + '/' + _date.getMonth() + '/';
|
||||
|
||||
makePath(pathWithDate);
|
||||
|
||||
return multer({
|
||||
storage: cdnStorage(pathWithDate)
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = cdnUpload;
|
||||
@ -27,9 +27,13 @@ const extraControllers = {
|
||||
}
|
||||
|
||||
var CDNFilePath = cdnHelper.getCDNFilenameWithPath(file.originalname, 'speaker');
|
||||
await multimediaFileService.uploadFile(file, CDNFilePath);
|
||||
console.log('CDNFilePath', CDNFilePath);
|
||||
|
||||
const context = buildContext(req, config);
|
||||
|
||||
await multimediaFileService.uploadFile(file, CDNFilePath, data, context);
|
||||
|
||||
const result = await multimediaService.create(data, buildContext(req, config));
|
||||
const result = await multimediaService.create(data, context);
|
||||
return handleResultResponse(result, null, null, res, httpStatus.CREATED)
|
||||
} catch (error) {
|
||||
return handleErrorResponse(MODULE_NAME, 'create', error, res)
|
||||
|
||||
@ -5,7 +5,7 @@ const { isAdministratorUser, isLoggedUser } = require('../../middlewares/accessV
|
||||
const { cacheSuccesses } = require('../../middlewares/cache');
|
||||
|
||||
// Uploader
|
||||
const uploader = require('../../middlewares/uploader.js');
|
||||
// const uploader = require('../../middlewares/uploader.js');
|
||||
|
||||
const SchemaValidator = require('../../middlewares/schemaValidator');
|
||||
|
||||
@ -63,14 +63,14 @@ const multimediasInputType = Joi.object().keys({
|
||||
routes.post('/admin/multimedias/',
|
||||
isAdministratorUser,
|
||||
//SchemaValidator(multimediasInputType, true),
|
||||
uploader.single('file'),
|
||||
//uploader.single('file'),
|
||||
multimediaController.create()
|
||||
);
|
||||
|
||||
routes.put('/admin/multimedias/:id',
|
||||
isAdministratorUser,
|
||||
//SchemaValidator(multimediasInputType, true),
|
||||
uploader.single('file'),
|
||||
//uploader.single('file'),
|
||||
multimediaController.update()
|
||||
);
|
||||
|
||||
|
||||
@ -1,14 +1,62 @@
|
||||
'use strict';
|
||||
|
||||
const httpStatus = require('http-status');
|
||||
const generateControllers = require('../../core/controllers');
|
||||
const multimediaFileService = require('./multimedia_file.service');
|
||||
const { extractParamsFromRequest, handleErrorResponse, handleResultResponse } = require('../../helpers/controller.helper');
|
||||
|
||||
|
||||
// Module Name
|
||||
const MODULE_NAME = '[multimediaFile.controller]';
|
||||
|
||||
const controllerOptions = { MODULE_NAME };
|
||||
const extraControllers = {};
|
||||
|
||||
function buildContext(req, config) {
|
||||
return {
|
||||
user: req.user,
|
||||
scopes: [],
|
||||
...config,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const extraControllers = {
|
||||
|
||||
/*upload: (config) => {
|
||||
return async (req, res, next) => {
|
||||
var file = req.file;
|
||||
console.log(file);
|
||||
|
||||
// ¿Hay fichero adjunto?
|
||||
if (!file || !file.buffer) {
|
||||
try {
|
||||
var CDNFilePath = cdnHelper.getCDNFilenameWithPath(file.originalname, 'speaker');
|
||||
await multimediaFileService.uploadFile(file, CDNFilePath, data, context);
|
||||
|
||||
} catch(error) {
|
||||
return handleErrorResponse(MODULE_NAME, 'upload', error, res);
|
||||
}
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
}
|
||||
},*/
|
||||
|
||||
create: (config) => {
|
||||
return async (req, res, next) => {
|
||||
try {
|
||||
var data = req.body;
|
||||
console.log(data);
|
||||
console.log(req.file);
|
||||
|
||||
const context = buildContext(req, config);
|
||||
const result = await multimediaFileService.create(data, context);
|
||||
return handleResultResponse(result, null, null, res, httpStatus.CREATED)
|
||||
} catch (error) {
|
||||
return handleErrorResponse(MODULE_NAME, 'create', error, res)
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = generateControllers(multimediaFileService, extraControllers, controllerOptions);
|
||||
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
const routes = require('express').Router();
|
||||
|
||||
// Uploader
|
||||
const cdnUpload = require('../../middlewares/uploader.js');
|
||||
const { isAdministratorUser, isLoggedUser } = require('../../middlewares/accessValidator');
|
||||
const { cacheSuccesses } = require('../../middlewares/cache');
|
||||
|
||||
//const SchemaValidator = require('../../middlewares/schemaValidator');
|
||||
const SchemaValidator = require('../../middlewares/schemaValidator');
|
||||
|
||||
const PaginateMiddleware = require('../../middlewares/paginate');
|
||||
const FieldMiddleware = require('../../middlewares/fields');
|
||||
const SortMiddleware = require('../../middlewares/sort');
|
||||
const multimediaFileController = require('./multimedia_file.controller');
|
||||
const { multimediaFilesInputType } = require('./multimedia_file.validations');
|
||||
|
||||
const generalInvalidFields = [
|
||||
'userId', 'createdAt', 'updatedAt',
|
||||
@ -35,7 +37,26 @@ routes.get('/multimediafiles/:id', cacheSuccesses('24 hours'),
|
||||
})
|
||||
);
|
||||
|
||||
/*********************************************************************************************************
|
||||
* ADMINISTRACIÓN
|
||||
*********************************************************************************************************
|
||||
*/
|
||||
|
||||
// Nuevo
|
||||
routes.post('/admin/multimediafiles/',
|
||||
isAdministratorUser,
|
||||
SchemaValidator(multimediaFilesInputType, true),
|
||||
cdnUpload().single('file'),
|
||||
multimediaFileController.create()
|
||||
);
|
||||
|
||||
// Modificación
|
||||
routes.put('/admin/multimediafiles/:id',
|
||||
isAdministratorUser,
|
||||
SchemaValidator(multimediaFilesInputType, true),
|
||||
cdnUpload().single('file'),
|
||||
multimediaFileController.update()
|
||||
);
|
||||
|
||||
|
||||
module.exports = routes;
|
||||
@ -27,6 +27,52 @@ const _generateThumbFileName = function (fileName, prefix) {
|
||||
);
|
||||
};
|
||||
|
||||
const _uploadFile = function (file, filename, options) {
|
||||
var defaultOptions = {
|
||||
thumb: false,
|
||||
thumbSize: config.uploads.thumb_size,
|
||||
}
|
||||
|
||||
options = _.defaults(options || {}, defaultOptions);
|
||||
var diskFilename = Path.join(config.uploads.path, filename);
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
if (!imageType(file.buffer)) {
|
||||
reject('No es un fichero de imagen');
|
||||
};
|
||||
|
||||
fs.writeFile(diskFilename, file.buffer, function (error) {
|
||||
if (error) {
|
||||
console.log(error);
|
||||
reject(error);
|
||||
} else {
|
||||
if (options.thumb) {
|
||||
var diskThumbFilename = _generateThumbFileName(diskfilename);
|
||||
sharp(file.buffer).resize(options.thumbSize).toBuffer()
|
||||
.then(function (data) {
|
||||
fs.writeFile(diskThumbFilename, data, function (error) {
|
||||
if (error) {
|
||||
console.log(error);
|
||||
reject(error);
|
||||
} else {
|
||||
resolve({
|
||||
fileName: fileName,
|
||||
diskFilename: diskFilename,
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
.catch(function (error) {
|
||||
console.log(error);
|
||||
reject(error);
|
||||
});
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
const extraMethods = {
|
||||
removeFile: function (filename) {
|
||||
@ -44,50 +90,21 @@ const extraMethods = {
|
||||
},
|
||||
|
||||
|
||||
uploadFile: function (file, filename, options) {
|
||||
var defaultOptions = {
|
||||
thumb: false,
|
||||
thumbSize: config.uploads.thumb_size,
|
||||
}
|
||||
|
||||
options = _.defaults(options || {}, defaultOptions);
|
||||
var diskFilename = Path.join(config.uploads.path, filename);
|
||||
|
||||
return new Promise(function(resolve, reject) {
|
||||
if (!imageType(file.buffer)) {
|
||||
reject('No es un fichero de imagen');
|
||||
};
|
||||
|
||||
fs.writeFile(diskFilename, file.buffer, function(error) {
|
||||
if (error) {
|
||||
console.log(error);
|
||||
reject(error);
|
||||
} else {
|
||||
if (options.thumb) {
|
||||
var diskThumbFilename = _generateThumbFileName(diskfilename);
|
||||
sharp(file.buffer).resize(options.thumbSize).toBuffer()
|
||||
.then(function (data) {
|
||||
fs.writeFile(diskThumbFilename, data, function(error) {
|
||||
if (error) {
|
||||
console.log(error);
|
||||
reject(error);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
})
|
||||
.catch(function (error) {
|
||||
console.log(error);
|
||||
reject(error);
|
||||
});
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
uploadFile: async function (file, filename, data, context) {
|
||||
const upload = await _uploadFile(file, filename);
|
||||
return await models.MultimediaFile.create({
|
||||
name: data.name,
|
||||
description: data.description,
|
||||
provider: 'cdn',
|
||||
class: 'picture',
|
||||
url: filename,
|
||||
userId: context && context.user ? context.user.id : undefined
|
||||
})
|
||||
},
|
||||
|
||||
create: async function(values, context) {
|
||||
|
||||
},
|
||||
|
||||
afterFetchOne: async (result, params, context) => {
|
||||
if (!result) {
|
||||
|
||||
11
modules/multimedia/multimedia_file.validations.js
Normal file
11
modules/multimedia/multimedia_file.validations.js
Normal file
@ -0,0 +1,11 @@
|
||||
const Joi = require('joi');
|
||||
|
||||
const multimediaFilesInputType = Joi.object().keys({
|
||||
name: Joi.string().optional(),
|
||||
description: Joi.string().optional(),
|
||||
url: Joi.string().optional(), // <-- URL de Vimeo, YouTube, etc.
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
multimediaFilesInputType,
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user