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