File: /var/dev/nowruzgan/rest/api/controllers/file/create.js
const fs = require('fs');
const path = require('path');
const fx = require('mkdir-recursive');
const uuid = require('uuid');
module.exports = {
friendlyName: 'CreateFile',
inputs: {
},
exits: {
forbidden: {statusCode: 403},
badRequest: {statusCode: 400},
uploadError: { statusCode: 521 },
},
getActions: () => ({'file.create': 'بارگذاری فایل'}),
fn: async function (inputs, exits) {
let session = this.req.sessionData;
let action = 'file.create';
await sails.helpers.permit(action, session).intercept('reject', 'forbidden');
sails.log.info({session, action, message: `uploading a file`});
if(this.req.body.data){
let data = this.req.body.data;
data = Buffer.from(data, 'base64');
var fname = uuid();
var fpath = path.resolve(global.appRoot, '../private/uploads', './'+fname.substr(0, 2));
try{ fx.mkdirSync(fpath); }catch(error){ return exits.uploadError(); }
try{ fs.writeFileSync(path.resolve(fpath, `./${fname}`), data); }catch(error){ return exits.uploadError(); }
return exits.success({fid: fname});
}
this.req.file('file').upload(
{maxBytes: 100*1024*1024},
async (error, uploadedFiles) => {
if(error) return exits.uploadError();
if(!uploadedFiles.length) return exits.badRequest();
var fname = uuid();
var fpath = path.resolve(global.appRoot, '../private/uploads', './'+fname.substr(0, 2));
try{ fx.mkdirSync(fpath); }catch(error){ return exits.uploadError(); }
try{ fs.renameSync(uploadedFiles[0].fd, path.resolve(fpath, `./${fname}`)); }catch(error){ return exits.uploadError(); }
exits.success({fid: fname});
});
}
};