作为一个Java开发人员,猛的要写一点js,还是有点困难的,搞了几天,终于解决了Node上传流到ftp的问题,保留一下心得吧!
由于项目使用Egg架构,但是Egg很多技术并不完善,网络上都科普不到,所以部分代码使用Node原生实现。
实现上传的主要逻辑如下:
1.用户发起请求,上传文件流;
2.Egg接受文件流(Egg已经封装了这部分技术,使用起来很方便)
3.保存文件流到本地服务器(因为很多公司ftp服务器只有内网访问权限,导致用户无法直接访问,所以需要本地服务器中转)
4.将本地服务器文件上传到ftp服务器
大致上逻辑是这样,多的不说,上代码:
Controller如下:
'use strict';
const Controller = require('egg').Controller;
class ftpController extends Controller{
/**
*@desc 图片上传接口
*/
async fileup() {
const {ctx, service} = this;
let ret = {"result": {}, "data": {}};
//记录日志
ctx.helper.logger(ctx);
// egg-multipart 已经帮我们处理文件二进制对象
// node.js 上传文件需要操作文件流
// 获取上传的文件流,stream 是一个FileStream对象
const stream = await ctx.getFileStream();
//调用服务
try {
//发送请求并返回相应结果
const result = await service.ftp.fileup(stream);
ret.data = result;
ret.result.code = "0";
ret.result.message = "上传文件成功";
} catch (e) {
//记录错误日志
ctx.helper.errorlog(ctx, e);
//处理异常结果
ret.result.code &