@rxstack/express-file-upload
TypeScript icon, indicating that this package has built-in type declarations

0.2.0 • Public • Published

RxStack ExpressFileUpload Module

The ExpressFileUpload module allows you to upload files using expressjs in rxstack framework. Under the hood it uses formidable and mime

Installation

npm install @rxstack/express-file-upload --save

// peerDependencies
npm install @rxstack/async-event-dispatcher@^0.2 @rxstack/core@^0.2 @rxstack/exceptions@^0.2 @rxstack/express-server@^0.2 

Documentation

Setup

ExpressFileUpload module needs to be registered in the application. The module depends on @rxstack/express-server, make sure it is installed and configured.

Let's create the application:

import {Application, ApplicationOptions} from '@rxstack/core';
import {ExpressFileUploadModule} from '@rxstack/express-file-upload';

export const APP_OPTIONS: ApplicationOptions = {
  imports: [
    // ...
    ExpressFileUploadModule.configure({
      enabled: true, // default is false
      hash: 'md5', // default is md5
      multiples: false, // default is false
      directory: './uploads' // default is os.tmpdir()
    }),
  ],
  servers: ['express'], 
  providers: [
    // ...
  ], 
  logger: {
    // ....
  }
};

new Application(APP_OPTIONS).start();

Module options

The module accepts the following options:

  • enabled: whether the module is enabled or not. The default is false
  • hash: If you want checksums calculated for incoming files, set this to either sha1 or md5. The default is md5
  • multiples: If this option is enabled, the files argument will contain arrays of files for inputs which submit multiple files using the HTML5 multiple attribute. The default is false
  • directory: Sets the directory for placing file uploads in. You can move them later on using fs.rename(). The default is os.tmpdir().

Controller usage

Uploaded file is available in the Request object and it is instance of File

import {Request, Response, Http} from '@rxstack/core';

export class FileUploadController {

  @Http('POST', '/files/upload', 'file_upload')
  async uploadAction(request: Request): Promise<Response> {
    // you can validate it by checking the file.size and file.type
    const file = request.files.get('file'); 
    return new Response(file);
  }
}

Here is an curl example:

curl -F 'file=@/path_to_file/hello.txt' http://localhost:3000/files/upload

License

Licensed under the MIT license.

Package Sidebar

Install

npm i @rxstack/express-file-upload

Weekly Downloads

0

Version

0.2.0

License

MIT

Unpacked Size

14.7 kB

Total Files

14

Last publish

Collaborators

  • zender