首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在NodeJS中通过FTP下载文件?

如何在NodeJS中通过FTP下载文件?
EN

Stack Overflow用户
提问于 2016-08-05 10:30:40
回答 2查看 4.3K关注 0票数 0

我想使用绝对FTP URL下载文件,如ftp://host:port/dir/file.extension

我试过node-libcurl, wget, wget-improved, request。所有人都失败了,因为协议必须是HTTP或HTTPS。

有可用于Node的FTP客户端(在npmjs上可用)。但是,根据他们的文档,他们需要创建到FTP服务器的连接,更改目录,然后下载它。

有什么简单的解决方案吗?

EN

回答 2

Stack Overflow用户

发布于 2016-08-05 17:43:31

我将在这里概述一个简单的方法(并且没有完整的代码解决方案!)。FTP基于TCP,具有简单的人类可读协议。要从FTP服务器获取文件,您需要执行以下操作:

  1. 使用net.Socket
  2. Use创建TCP套接字以连接到端口21上的FTP服务器
  3. 使用socket.writesocket.on('data')与服务器通信以发送数据和读取数据

this blog post中提供了用于简单文件检索的FTPs协议示例,可总结为:

使用net.Socket.connect

  • Set用户使用net.Socket.connect

  • Set command

  • Authenticate连接到服务器,使用PASS

  • Go连接到所需目录使用CWD

  • Change连接到被动模式使用PASV

  • Read服务器回复查找要连接的IP和端口以便获取文件

  • 在IP和先前step

  • Voilà!

的端口上打开另一个套接字

票数 2
EN

Stack Overflow用户

发布于 2016-09-22 23:56:48

你可以使用node-libcurl,我不知道你是怎么做到的,但这里有一些有效的代码。

代码语言:javascript
运行
复制
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以直接指向该文件,并删除了WILDCARDMATCHCHUNK_*_FUNCTION选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38780205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档