NODE使用ftp和egg库读取ftp服务器上的文件并返回给前端,但是ftp库获取的stream是个Socket对象无法直接给ctx.body赋值返回数据,这个问题怎么解决请给我完整的代码
时间: 2024-02-26 10:58:58 浏览: 223
使用ftp时出现Socket ERROR的解决方法.docx
5星 · 资源好评率100%
好的,这里是一个完整的示例代码:
```javascript
const ftp = require('basic-ftp');
const { createReadStream } = require('fs');
const { promisify } = require('util');
const egg = require('egg');
const readFile = promisify(egg.utils.promisifyStream);
async function getFileFromFtpServer(ctx) {
const client = new ftp.Client();
try {
await client.access({
host: 'ftp.example.com',
user: 'username',
password: 'password',
});
// 下载文件到本地
await client.downloadTo(
createReadStream('local-file.txt'),
'/remote/file.txt'
);
// 读取文件内容
const fileContent = await readFile('local-file.txt', 'utf8');
// 返回文件内容
ctx.body = fileContent;
} catch (err) {
console.error(err);
ctx.status = 500;
ctx.body = 'Error retrieving file from FTP server';
} finally {
client.close();
}
}
module.exports = {
getFileFromFtpServer,
};
```
这个示例代码使用了 `basic-ftp` 库来连接到 FTP 服务器,并使用 `downloadTo` 方法下载文件到本地。然后,使用 `promisifyStream` 将 `createReadStream` 转换为 Promise,以便可以使用 `await` 读取本地文件的内容。最后,将文件内容设置为 `ctx.body` 并返回给前端。如果出现错误,将返回 500 状态码和错误消息。
阅读全文