如何在NodeJS中通过FTP上传PDF缓冲区内容到服务器
你可以借助Node.js的FTP客户端包完成Buffer的直传,不需要先把PDF写入本地磁盘,直接把生成的Buffer上传到FTP服务器即可。
实现步骤
安装常用的FTP客户端依赖:
npm install basic-ftp调整你的代码,在获取到pdfBuffer的位置新增FTP上传逻辑即可,完整修改后的代码如下:
const html_to_pdf = require('html-pdf-node'); const ftp = require('basic-ftp'); const { Readable } = require('stream'); const generatePDF = async () => { // 测试用HTML文件 let content = ` <html> <head> <title>Test Application</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css"> </head> <body> <div class="container"> <h2>Just a Test</h2> </div> </body> </html> `; // 生成PDF let options = { format: 'letter', margin: { right: '40px', left: '40px' } }; let file = { content }; try { const pdfBuffer = await html_to_pdf.generatePdf(file, options); console.log('PDF生成完成,开始上传FTP'); // 初始化FTP客户端 const client = new ftp.Client(); // 开启调试日志可选,生产环境可以关闭 // client.ftp.verbose = true; // 连接FTP服务器,替换为你自己的服务器信息 await client.access({ host: "你的FTP服务器地址", user: "你的FTP用户名", password: "你的FTP密码", // 如果是FTP显式TLS连接可以加secure: true,普通FTP不用加 }); // 可选:切换到服务器上指定的存储目录 // await client.cd('/path/to/your/pdf/storage'); // 直接把Buffer上传为test.pdf await client.uploadFrom(Readable.from(pdfBuffer), 'test.pdf'); console.log('PDF上传完成'); // 关闭连接 client.close(); } catch (err) { console.error('操作失败', err); } }
注意事项
- 如果你的服务器用的是SFTP而非FTP协议,替换使用
ssh2-sftp-client包即可,上传逻辑基本一致 - 生产环境不要硬编码FTP账号密码等敏感信息,建议通过环境变量读取
- 你可以根据需求修改上传后的文件名和存储路径
内容的提问来源于stack exchange,提问作者myTest532 myTest532
相关产品推荐
相关产品推荐

