Skip to content

hnrch02/multer-ftp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

multer-ftp

FTP storage engine for multer.

Installation

$ npm install --save multer-ftp

Basic Usage

var multer = require('multer')
var FTPStorage = require('multer-ftp')

var upload = multer({
  storage: new FTPStorage({
    basepath: '/remote/path',
    ftp: {
      host: 'example.com',
      secure: true, // enables FTPS/FTP with TLS
      user: 'user',
      password: 'password'
    }
  })
})

For more FTP connection options see ftp module connect method.

Different filenames

By default random filenames are chosen (crypto.randomBytes), you can change this behavior however by using a custom destination function:

// Demonstrates destination that uses sha1 digest of file
var multer = require('multer')
var crypto = require('crypto')
var FTPStorage = require('multer-ftp')

var upload = multer({
  storage: new FTPStorage({
    destination: function (req, file, options, callback) {
      var digest = crypto.createHash('sha1')

      digest.setEncoding('hex')

      file.stream.pipe(digest)

      file.stream.on('end', function () {
        digest.end()
        callback(null, digest.read())
      })
    },
    ftp: { /* ... */ }
  })
})

Advanced usage

var multer = require('multer')
var FTPStorage = require('multer-ftp')
var FTP = require('ftp')

var upload = multer({
  storage: new FTPStorage({
    basepath: '/remote/path', // base path for file uploads on the server
    ftp: { /* ... */ }, // FTP connection options, see `ftp` node module for more
    connection: new FTP(), // pass existing instance of `ftp`
    destination: function (req, file, options, callback) {
      callback(null, 'testfilename') // custom file destination, file extension is added to the end of the path
    },
    transformFile: function (req, file, callback) {
      // transform the file before uploading it
      //   file.stream is a ReadableStream of the file
      //   callback(error, < ReadableStream | Buffer | String >)
      callback(null, file.stream)
    }
  })
})

Todo

Write tests

License

MIT