This commit is contained in:
David Arranz 2019-08-15 23:44:09 +02:00
parent 1771981b2f
commit afd69b9da4
4 changed files with 55 additions and 13 deletions

View File

@ -2,6 +2,7 @@ const Path = require("path");
const config = require('../config'); const config = require('../config');
const sanitize = require("sanitize-filename"); const sanitize = require("sanitize-filename");
const safename = require("safename"); const safename = require("safename");
const unf = require('unique-file-name');
const assetsUrl = config.cdn.hostname; const assetsUrl = config.cdn.hostname;
@ -16,6 +17,14 @@ const CDN_PATHS = {
const sanitizeFilename = (filename) => safename(sanitize(filename, { replacement: "_" })); const sanitizeFilename = (filename) => safename(sanitize(filename, { replacement: "_" }));
const getUniqueName = function (path, filename) {
const namer = unf({
format: '%32b_%6r%8e',
dir: path
});
return namer(filename)
}
const getCDNMediaUrl = (mediaUri) => { const getCDNMediaUrl = (mediaUri) => {
if (mediaUri) { if (mediaUri) {
const pathParsed = mediaUri.indexOf("media") == 0 ? mediaUri.substr("media/".length, mediaUri.length) : mediaUri; const pathParsed = mediaUri.indexOf("media") == 0 ? mediaUri.substr("media/".length, mediaUri.length) : mediaUri;
@ -28,6 +37,28 @@ const getCDNMediaUrl = (mediaUri) => {
const getCDNCityMediaUrl = (cityName) => encodeURI(`${assetsUrl}/${CDN_PATHS.CITIES}/${cityName}.jpg`); const getCDNCityMediaUrl = (cityName) => encodeURI(`${assetsUrl}/${CDN_PATHS.CITIES}/${cityName}.jpg`);
const getCDNPath = (type = '') => {
var cdnPath = '';
switch (type) {
case 'speaker':
cdnPath = CDN_PATHS.SPEAKERS;
break;
case 'event':
cdnPath = CDN_PATHS.EVENT;
break;
case 'post':
cdnPath = CDN_PATHS.BLOG;
break;
default:
var _date = new Date();
cdnPath = _date.getFullYear() + '/' + _date.getMonth() + '/';
break;
}
return Path.join(config.uploads.path, cdnPath);
}
const getCDNFilenameWithPath = (filename, type) => { const getCDNFilenameWithPath = (filename, type) => {
var cdnPath = ''; var cdnPath = '';
switch (type) { switch (type) {
@ -43,14 +74,19 @@ const getCDNFilenameWithPath = (filename, type) => {
break; break;
default: default:
throw new Error('Multimedia type unknown'); var _date = new Date();
cdnPath = _date.getFullYear() + '/' + _date.getMonth() + '/';
break;
} }
return Path.join(cdnPath, sanitizeFilename(filename)); return Path.join(cdnPath, sanitizeFilename(filename));
} }
module.exports = { module.exports = {
sanitizeFilename,
CDN_PATHS, CDN_PATHS,
getCDNCityMediaUrl, getCDNCityMediaUrl,
getCDNMediaUrl, getCDNMediaUrl,
getCDNFilenameWithPath getCDNPath,
getCDNFilenameWithPath,
getUniqueName
} }

View File

@ -1,6 +1,7 @@
var multer = require('multer'); var multer = require('multer');
var mkdirp = require('mkdirp'); var mkdirp = require('mkdirp');
var config = require('../config'); var config = require('../config');
var cdnHelper = require('../helpers/cdn.helper');
/*var upload = function (path) { /*var upload = function (path) {
return multer({storage: storage(path)}); return multer({storage: storage(path)});
@ -19,24 +20,22 @@ var makePath = function(path) {
var cdnStorage = function(path) { var cdnStorage = function(path) {
return multer.diskStorage({ return multer.diskStorage({
destination: function (req, file, cb) { destination: function (req, file, cb) {
console.log(req);
console.log(file);
cb(null, path) cb(null, path)
}, },
filename: function (req, file, cb) { filename: function (req, file, cb) {
cb(null, file.originalname) cdnHelper.getUniqueName(path, file.originalname)
.then(function(betterName) {
cb(null, betterName)
});
} }
}); });
} }
var cdnUpload = function() { var cdnUpload = function() {
var _date = new Date(); var cdnPath = cdnHelper.getCDNPath();
var pathWithDate = config.uploads.path + '/' + _date.getFullYear() + '/' + _date.getMonth() + '/'; makePath(cdnPath);
makePath(pathWithDate);
return multer({ return multer({
storage: cdnStorage(pathWithDate) storage: cdnStorage(cdnPath)
}); });
} }

View File

@ -1,5 +1,6 @@
'use strict'; 'use strict';
const httpStatus = require('http-status'); const httpStatus = require('http-status');
var configuration = require('../../config');
const generateControllers = require('../../core/controllers'); const generateControllers = require('../../core/controllers');
const multimediaFileService = require('./multimedia_file.service'); const multimediaFileService = require('./multimedia_file.service');
const { extractParamsFromRequest, handleErrorResponse, handleResultResponse } = require('../../helpers/controller.helper'); const { extractParamsFromRequest, handleErrorResponse, handleResultResponse } = require('../../helpers/controller.helper');
@ -43,10 +44,14 @@ const extraControllers = {
create: (config) => { create: (config) => {
return async (req, res, next) => { return async (req, res, next) => {
var data = req.body;
try { try {
if (req.file) {
data.url = req.file.path.replace(configuration.uploads.path, '');
}
var data = req.body; var data = req.body;
console.log(data); console.log(data);
console.log(req.file);
const context = buildContext(req, config); const context = buildContext(req, config);
const result = await multimediaFileService.create(data, context); const result = await multimediaFileService.create(data, context);

View File

@ -26,6 +26,7 @@
"bcrypt": "^3.0.6", "bcrypt": "^3.0.6",
"body-parser": "^1.18.3", "body-parser": "^1.18.3",
"buffer": "^5.2.1", "buffer": "^5.2.1",
"chai": "^4.2.0",
"cheerio": "^1.0.0-rc.3", "cheerio": "^1.0.0-rc.3",
"compression": "^1.7.4", "compression": "^1.7.4",
"cors": "^2.8.5", "cors": "^2.8.5",
@ -63,6 +64,7 @@
"sanitize-filename": "^1.6.2", "sanitize-filename": "^1.6.2",
"sequelize": "^5.6.1", "sequelize": "^5.6.1",
"sharp": "^0.23.0", "sharp": "^0.23.0",
"unique-file-name": "^1.0.0",
"vimeo": "^2.1.1", "vimeo": "^2.1.1",
"vm": "^0.1.0", "vm": "^0.1.0",
"winston": "^3.2.1" "winston": "^3.2.1"