js的ftp文件上传

前端来做ftp文件上传

前端做ftp文件上传比较少,网上很难找到。琢磨了一段时间做出来,应该有些问题。在这里分享一下。(希望程序员小朋友可以提出修改建议)

ftp的api文档:ftpAPI
node文件流:Stream接口

  1. 首先上传文件到ftp
  var Client = require('ftp');
  var fs = require('fs');

  var c = new Client();
  c.on('ready', function() {
    c.put('foo.txt', 'foo.remote-copy.txt', function(err) {
      if (err) throw err;
      c.end();
    });
  });
  // 默认链接到 localhost:21 
  c.connect();

可是要是需要上传进度条功能。就需要用到node文件流。

2.上传进度

//创建读取文件流
 var rr = fs.createReadStream(file.path, {
                start: 0,
                end: file.fileSize
            });
            var pos = 0 ;
            var oldRead = rr._read;
            rr._read = function (n) {
                pos = this.pos;//获取当前文件上传的大小
                watchNum = parseInt(pos * 100 / fileSizeOne); //获取读取进度
                localStorage.setItem("percent",watchNum);
                oldRead.call(this, n);
            };
            c.put(rr, userName + '/' + file.fileName, function (err) {
                if (err) {
                ..............
                    c.end();
                }

3.断点续传

暂停使用c.end()直接将ftp关闭,(当时使用c.abort()并没有效果,不造为毛)。继续就使用ftp的restart方法

//使用c.size()获取这个文件在ftp上传了多少
 c.size(userName + '/' + file.fileName, function (err, fileBytes) {
     if (err){
        console.log(err);                  
        c.end();}
     //重新开始                
     c.restart(fileBytes,function(err){
          console.log(err);
          var rr1 = fs.createReadStream(paraOne[0].path, {
               start: numBytes,
               end: file.fileSize
           });
          var pos1 = 0;
          var oldRead = rr1._read;
          rr1._read = function (n) {
              pos1 = this.pos;//获取读取进度
              watchNum = parseInt(pos1 * 100 / file.fileSize);                  
              oldRead.call(this, n);
          };
          继续上传
         c.put(rr1, userName+ '/' + file.fileName, function (err) {
                if (err) { c.end(); }
                .........
                }
     }
}

也可以使用c.append()

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值