我想使用绝对FTP网址下载文件,例如ftp://host:port/dir/file.extension
我试过node-libcurl, wget, wget-improved, request
。所有人都说失败,说协议必须是HTTP或HTTPS。
有可用于节点的FTP客户端(在npmjs上可用)。但是,根据他们的文档,他们需要创建与FTP服务器的连接,更改目录然后下载它。
有没有简单的解决方案?
答案 0 :(得分:2)
我将在这里概述一个简单的方法(并没有完整的代码解决方案!)。 FTP基于TCP,具有简单的人类可读协议。要从FTP服务器获取文件,您需要执行以下操作:
net.Socket
var today = new Date();
today = new Date(today.setHours(0,0,0,0));
console.log('Date: '+today);
连接到端口21上的FTP服务器socket.write
与服务器通信以发送数据,socket.on('data')
与数据进行通信this blog post中提供了用于简单文件检索的FTP协议示例,可归纳如下:
socket.connect
net.Socket.connect
命令USER
PASS
CWD
答案 1 :(得分:0)
您可以使用node-libcurl,我不知道您是如何做到的,但这里有一些正常的代码。
var Curl = require( 'node-libcurl' ).Curl,
Easy = require( 'node-libcurl' ).Easy,
path = require( 'path' ),
fs = require( 'fs' );
var handle = new Easy(),
url = 'ftp://speedtest.tele2.net/1MB.zip',
// Download file to the path given as first argument
// or to a file named 1MB.zip on current dir
fileOutPath = process.argv[2] || path.join( process.cwd(), '1MB.zip' ),
fileOut = fs.openSync( fileOutPath, 'w+' );
handle.setOpt( Curl.option.URL, url );
handle.setOpt( Curl.option.WRITEFUNCTION, function( buff, nmemb, size ) {
var written = 0;
if ( fileOut ) {
written = fs.writeSync( fileOut, buff, 0, nmemb * size );
}
return written;
});
handle.perform();
fs.closeSync( fileOut );
存储库目前有一个example显示如何使用通配符匹配下载文件,我只是将URL更改为直接指向该文件,并删除了WILDCARDMATCH
和CHUNK_*_FUNCTION
选项