【发布时间】:2022-11-15 23:51:10
【问题描述】:
所以我想从前端-> 后端-> FTP 服务器上传我的文件。我想上传它而不将其保存在后端。我想在后端收到我的文件后直接将其上传到 FTP 服务器。
我正在使用快递。
我目前的代码是:
baseServer.post(
"/api/upload-image",
upload.single('file'),
function (req: Request, res: Response, next: NextFunction) {
uploadToFTP(req, res, next);
}
);
function uploadToFTP(req: Request, res: Response, next: NextFunction) {
// sftp settings
var storage = sftpStorage({
sftp: {
host: process.env.FTP_URL,
port: process.env.FTP_PORT,
username: process.env.FTP_USERNAME,
password: process.env.FTP_PASSWORD,
},
destination: function (req: Request, file: any, cb: any) {
cb(null, ""); // designation folder in host
},
filename: function (req: Request, file: any, cb: any) {
// file name settings
cb(null, file.fieldname + "-" + Date.now());
},
});
var upload = multer({ storage: storage }).single("file");
upload(req, res, function (err: any) {
if (err) {
console.log("Error Occured", JSON.stringify(err));
res.json({ error: err });
} else {
console.log("Files uploaded successfully");
res.json({ success: true});
}
});
}
有一个错误:
发生错误 {"storageErrors":[]}
请帮忙。
编辑
我像这样更改了我的代码:
import { NextFunction, Request, Response } from "express"; import { admin } from "../../middlewares/authMiddleware"; import { baseServer } from "../../server"; var multer = require("multer"); var sftpStorage = require("multer-sftp"); const upload = multer(); // sftp settings var storage = sftpStorage({ sftp: { host: process.env.FTP_URL, port: process.env.FTP_PORT, username: process.env.FTP_USERNAME, password: process.env.FTP_PASSWORD, }, destination: function (req: Request, file: any, cb: any) { cb(null, ""); // designation folder in host }, filename: function (req: Request, file: any, cb: any) { // file name settings cb(null, file.fieldname + "-" + Date.now()); }, }); var uploadToFTP = multer({ storage: storage }).single('file'); baseServer.post( "/api/upload-image", upload.single("file"), function (req: Request, res: Response, next: NextFunction) { uploadToFTP(req, res, function (err: any) { if (err) { console.log("Error Occured", JSON.stringify(err)); res.json({ error: err }); } else { console.log("Files uploaded successfully"); res.json({ success: true }); } }); } );错误:
发生错误 {"storageErrors":[]}
我的服务器.ts
我的 server.ts 有 bodyParser:
export const baseServer = express(); const PORT = process.env.PORT; const bodyParser = require('body-parser'); baseServer.use(express.json()); baseServer.use(bodyParser.json({limit:'50mb'})); baseServer.use(bodyParser.urlencoded({extended:true, limit:'50mb'}));上传的图片只有160kb。我不知道是什么问题。
【问题讨论】:
-
如何将文件发送到服务器?你在
baseServer中使用 bodyParser 吗? -
是的,我的 baseServer 中设置了 bodyParser。请检查更新的问题以获取详细信息
-
我不熟悉 multer,但根据文档,您必须仅提供
uploadToFTP作为路由处理程序的回调函数来代替upload.single("file")。
标签: javascript angular typescript express multer