使用basic-ftp从远程服务器下载视频到本地生成0字节文件的解决方法
解决FTP下载文件为0MB的问题
以下是针对你遇到的问题的排查和解决步骤:
1. 修复本地路径的转义错误
你的本地路径使用单引号包裹,Windows路径中的反斜杠\会被Node.js解析为转义字符(比如\t会变成制表符),导致实际写入路径错误,最终生成空文件。
解决方法:
- 使用双引号并转义反斜杠:
const path = "C:\\inetpub\\wwwroot\\Server\\views\\admin\\files\\session\\trimed\\oblivin.mp4"; - 或者使用正斜杠替代反斜杠:
const path = "C:/inetpub/wwwroot/Server/views/admin/files/session/trimed/oblivin.mp4"; - 更推荐用
path模块拼接路径,避免手动处理转义:const path = require("path"); const localFilePath = path.join("C:", "inetpub", "wwwroot", "Server", "views", "admin", "files", "session", "trimed", "oblivin.mp4");
2. 确认远程文件的路径正确性
你执行了await client.ensureDir("movies");,这会将FTP客户端的当前工作目录切换到movies(不存在则创建)。如果远程的oblivin.mp4不在movies目录下,client.downloadTo会找不到文件,但仍会创建本地空文件。
解决方法:
- 查看
client.list()的输出,确认oblivin.mp4是否在当前的movies目录中。 - 如果文件在其他远程目录,指定完整远程路径,比如:
// 假设文件在远程根目录 await client.downloadTo(localFilePath, "/oblivin.mp4"); // 或者在其他子目录 await client.downloadTo(localFilePath, "/other/folder/oblivin.mp4");
3. 检查FTP被动模式配置
部分FTP服务器要求使用被动模式才能正常传输文件,若被动模式未正确开启,可能导致传输中断,生成空文件。
解决方法:
在client.access之后添加被动模式强制开启:
await client.access({ host: "****", user: "****", password: "****", secure: false }); client.ftp.forcePasv(true); // 强制开启被动模式
4. 验证远程文件的权限与存在性
确保FTP用户对远程的oblivin.mp4文件有读取权限,同时文件本身存在且大小不为0。可以通过以下代码检查文件大小:
console.log("远程文件大小:", await client.size("oblivin.mp4"));
如果返回0或报错,说明远程文件本身有问题,或者用户无权限访问。
内容的提问来源于stack exchange,提问作者Sara Ree
相关产品推荐
相关产品推荐

