Skip to content

使用nodejs ftp模块上传多个文件

Notifications You must be signed in to change notification settings

SamSpeeding/ftp-upload

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

使用nodejs ftp模块上传多个文件

安装

npm i -D ftp-upload

单任务使用方法

const path = require('path')
const { FtpUpload, ftpRunSequence } = require('ftp-upload')

const ftpUpload = new FtpUpload({
  // 指定一个远程域名,生成测试连接时会用到
  remoteDomain: 'http://www.test.com',
  // 指定一个远程目录
  // 注:必须以 / 开头
  // 支持两种模式:
  // 1、普通模式,上传的文件将直接存放到该路径下。
  //    如:'/test/first'
  // 2、字符串匹配模式,该模式会将[date]和[random]替换成当前日期和随机数。
  //    当字符串中有[random]时,会询问是否手动输入一个值替换随机数
  //    如:'/test/[date]' 或 '/test/[date]/[random]'
  remotePath: '/test/first',
  // autoRemotePath: true, // 跳过询问远程目录,默认false
  // autoOverwirte: true, // 跳过询问覆盖已有目录,默认false
  // 默认上传方式:遇到文件名称一样的文件是替换还是跳过。值有"skip" 或 "overwrite",默认"overwrite"
  uploadType: 'skip',
  // 根据匹配规则,执行对应上传方式
  // 注:根据规则匹配到的文件将无视默认上传方式;一个上传文件只会对应一个匹配规则,多个匹配规则时取第一个
  rules: [
    {
      test: /\.html?$/,
      use: 'overwrite'
    },
    {
      test: /\.(eot|svg|ttf|woff2?)$/,
      use: 'overwrite'
    }
  ],
  // 支持同时上传多个文件,建议2~3个
  threads: 3,
  // 指定一个本地目录
  // 这里必须是一个绝对路径
  localPath: path.resolve(__dirname, 'dist'),
  // 本地目录的glob选择器,默认'**/*.*'
  glob: '*.@(html|htm)',
  // ftp登录的账号密码等信息
  host: '36.120.77.38',
  port: 21,
  user: 'Your user name',
  password: 'Your password',
  // 上传完成的回调
  /*success: function (res) {
    console.log(res)
  }*/
})

// 初始化准备工作
ftpUpload.init().on('ready', function (res) {
  // 处理一些逻辑...
  // ...
  setTimeout(() => {
    // 开始上传文件
    this.start(res.remoteDestPath)
  }, 3000)
})

// 文件上传成功
ftpUpload.on('success', function (res) {
  console.log(res)
})

多任务使用方法

// 多个ftp上传任务
const ftpTasks = [
  {
    // 指定一个远程域名,生成测试连接时会用到
    remoteDomain: 'http://www.test.com',
    // 指定一个远程目录
    // 注:必须以 / 开头
    // 支持两种模式:
    // 1、普通模式,上传的文件将直接存放到该路径下。
    //    如:'/test/first'
    // 2、字符串匹配模式,该模式会将[date]和[random]替换成当前日期和随机数。
    //    当字符串中有[random]时,会询问是否手动输入一个值替换随机数
    //    如:'/test/[date]' 或 '/test/[date]/[random]'
    remotePath: '/test',
    // 跳过询问远程目录,默认false
    // autoRemotePath: true,
    // 跳过询问覆盖已有目录,默认false
    // autoOverwirte: true,
    // 默认上传方式:遇到文件名称一样的文件是替换还是跳过。值有"skip" 或 "overwrite",默认"overwrite"
    // uploadType: 'skip',
    // 根据匹配规则,执行对应上传方式
    // 注:根据规则匹配到的文件将无视默认上传方式;一个上传文件只会对应一个匹配规则,多个匹配规则时取第一个
    /*rules: [
      {
        test: /\.html?$/,
        use: 'overwrite'
      },
      {
        test: /\.(eot|svg|ttf|woff2?)$/,
        use: 'overwrite'
      }
    ],*/
    // 支持同时上传多个文件,建议2~3个
    threads: 1,
    // 指定一个本地目录
    // 这里必须是一个绝对路径
    localPath: path.resolve(__dirname, 'dist'),
    // 本地目录的glob选择器,默认'**/*.*'
    glob: '*.@(html|htm)',
    // ftp登录的账号密码等信息
    host: '36.120.77.38',
    port: 21,
    user: 'Your user name',
    password: 'Your password',
    // 上传完成的回调
    /*success: function (res) {
      console.log(res)
    }*/
  },
  {
    // 指定一个远程域名,生成测试连接时会用到
    remoteDomain: 'http://static.test.com',
    // 指定一个远程目录
    // 注:必须以 / 开头
    // 支持两种模式:
    // 1、普通模式,上传的文件将直接存放到该路径下。
    //    如:'/test/first'
    // 2、字符串匹配模式,该模式会将[date]和[random]替换成当前日期和随机数。
    //    当字符串中有[random]时,会询问是否手动输入一个值替换随机数
    //    如:'/test/[date]' 或 '/test/[date]/[random]'
    remotePath: '/test',
    // 跳过询问远程目录,默认false
    // autoRemotePath: true,
    // 跳过询问覆盖已有目录,默认false
    // autoOverwirte: true,
    // 默认上传方式:遇到文件名称一样的文件是替换还是跳过。值有"skip" 或 "overwrite",默认"overwrite"
    uploadType: 'skip',
    // 根据匹配规则,执行对应上传方式
    // 注:根据规则匹配到的文件将无视默认上传方式;一个上传文件只会对应一个匹配规则,多个匹配规则时取第一个
    rules: [
      {
        test: /\.html?$/,
        use: 'overwrite'
      },
      {
        test: /\.(eot|svg|ttf|woff2?)$/,
        use: 'overwrite'
      }
    ],
    // 支持同时上传多个文件,建议2~3个
    threads: 3,
    // 指定一个本地目录
    // 这里必须是一个绝对路径
    localPath: path.resolve(__dirname, 'dist/assets'),
    // 本地目录的glob选择器,默认'**/*.*'
    glob: '**/*.*',
    // ftp登录的账号密码等信息
    host: '36.120.77.38',
    port: 21,
    user: 'Your user name',
    password: 'Your password',
    // 上传完成的回调
    /*success: function (res) {
      console.log(res)
    }*/
  }
]

// 实例化每个ftp上传任务
const ftpUploadHtml = new FtpUpload(ftpTasks[0])
const ftpUploadStatic = new FtpUpload(ftpTasks[1])

// 按照顺序依次执行ftp上传任务
ftpRunSequence([ftpUploadHtml, ftpUploadStatic], ftpUpload => {
  ftpUpload.init().on('ready', res => {
    setTimeout(() => {
      ftpUpload.start(res.remoteDestPath)
    }, 3000)
  })
  ftpUpload.on('success', res => {
    console.log(res)
  })
})

About

使用nodejs ftp模块上传多个文件

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%