HEX
Server: nginx/1.24.0
System: Linux nowruzgan 6.8.0-57-generic #59-Ubuntu SMP PREEMPT_DYNAMIC Sat Mar 15 17:40:59 UTC 2025 x86_64
User: babak (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
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});
      });
  }
};