diff --git a/src/Adapters/Files/GridStoreAdapter.js b/src/Adapters/Files/GridStoreAdapter.js index ee5cf3ab..e6532e21 100644 --- a/src/Adapters/Files/GridStoreAdapter.js +++ b/src/Adapters/Files/GridStoreAdapter.js @@ -28,7 +28,7 @@ export class GridStoreAdapter extends FilesAdapter { // For a given config object, filename, and data, store a file // Returns a promise - createFile(config, filename: string, data, contentType: string) { + createFile(config, filename: string, data, contentType) { return this._connect().then(database => { let gridStore = new GridStore(database, filename, 'w'); return gridStore.open(); diff --git a/src/Controllers/FilesController.js b/src/Controllers/FilesController.js index 78086758..712e326c 100644 --- a/src/Controllers/FilesController.js +++ b/src/Controllers/FilesController.js @@ -3,6 +3,8 @@ import { Parse } from 'parse/node'; import { randomHexString } from '../cryptoUtils'; import AdaptableController from './AdaptableController'; import { FilesAdapter } from '../Adapters/Files/FilesAdapter'; +import path from 'path'; +import mime from 'mime'; export class FilesController extends AdaptableController { @@ -11,7 +13,19 @@ export class FilesController extends AdaptableController { } createFile(config, filename, data, contentType) { + + let extname = path.extname(filename); + + const hasExtension = extname.length > 0; + + if (!hasExtension && contentType && mime.extension(contentType)) { + filename = filename + '.' + mime.extension(contentType); + } else if (hasExtension && !contentType) { + contentType = mime.lookup(filename); + } + filename = randomHexString(32) + '_' + filename; + var location = this.adapter.getFileLocation(config, filename); return this.adapter.createFile(config, filename, data, contentType).then(() => { return Promise.resolve({ diff --git a/src/Routers/FilesRouter.js b/src/Routers/FilesRouter.js index 5c82d7cc..a3a3c811 100644 --- a/src/Routers/FilesRouter.js +++ b/src/Routers/FilesRouter.js @@ -2,9 +2,8 @@ import express from 'express'; import BodyParser from 'body-parser'; import * as Middlewares from '../middlewares'; import { randomHexString } from '../cryptoUtils'; -import mime from 'mime'; import Config from '../Config'; -import path from 'path'; +import mime from 'mime'; export class FilesRouter { @@ -42,7 +41,7 @@ export class FilesRouter { var contentType = mime.lookup(filename); res.set('Content-Type', contentType); res.end(data); - }).catch(() => { + }).catch((err) => { res.status(404); res.set('Content-Type', 'text/plain'); res.end('File not found.'); @@ -68,20 +67,8 @@ export class FilesRouter { return; } - let filename = req.params.filename; - - // safe way to get the extension - let extname = path.extname(filename); - let contentType = req.get('Content-type'); - - const hasExtension = extname.length > 0; - - if (!hasExtension && contentType && mime.extension(contentType)) { - filename = filename + '.' + mime.extension(contentType); - } else if (hasExtension && !contentType) { - contentType = mime.lookup(req.params.filename); - } - + const filename = req.params.filename; + const contentType = req.get('Content-type'); const config = req.config; const filesController = config.filesController;