如何在 Nodejs 中实现文件上传:分步指南
介绍
嗨,在本文中,我们将了解如何在 nodejs 服务器中处理文件上传并使用最佳实践进行存储。我将使用 Apexx 云作为我们的文件存储服务。
安装软件包
npm i express nodemon cors multer @apexxcloud/sdk-node dotenv
安装后,更新 package.json 以添加启动脚本
"scripts":{
"start": "nodemon index.js",
// rest of the scripts
}在根文件夹中创建一个 index.js 文件,然后创建一个名为 src 的文件夹。在 src 文件夹中分别创建控制器和路由的文件夹,您的文件夹结构应如下所示。
project-root/
│
├── index.js # Entry point of the application
├── package.json # Project metadata and dependencies
├── package-lock.json # Auto-generated dependency tree
├── node_modules/ # Installed dependencies
│
└── src/
├── controllers/ # Contains controller files
│ └── file.controller.js
│
├── routes/ # Contains route files
│ └── file.route.js设置 Apexx 云
让我们开始写一些代码
让我们开始编写处理“file.controller.js”中的请求的控制器。
// Setup our apexx cloud sdk
const ApexxCloud = require("@apexxcloud/sdk-node");
const storage = new ApexxCloud({
accessKey: process.env.APEXXCLOUD_ACCESS_KEY,
secretKey: process.env.APEXXCLOUD_SECRET_KEY,
region: process.env.APEXXCLOUD_REGION,
bucket: process.env.APEXXCLOUD_BUCKET,
});
// Upload file function
const uploadFile = async (req, res) => {
try {
if (!req.file) {
return res.status(400).json({ error: "No file provided" });
}
const { originalname, filename, size, path, mimetype } = req.file;
const { key, visibility } = req.query;
const result = await storage.files.upload(req.file.buffer, {
key: key || orginalname,
visibility: visiblity || "public",
contentType: mimetype,
});
res.status(200).json(result);
} catch (error) {
console.log(error);
res.status(500).json({ error: `File upload failed: ${error.message}` });
}
};首先,我们导入 `@apexxcloud/sdk-node`,并通过传入凭据创建一个存储对象。然后,我们创建名为 `uploadFile` 的函数,在该函数中,我们从 `req.query` 获取 `key` 和 `visibility`,并从 `req.file` 获取文件详细信息
然后我们使用 apexx cloud sdk 中的 `upload` 函数将其上传到 apexx cloud。上传时,您可以配置文件的可见性,可以是 `public` 或 `private`,默认情况下所有文件都是公开的。
现在让我们在“file.route.js”中设置路线。
const express = require("express");
const router = express.Router();
const multer = require("multer");
const { uploadFile } = require("../controllers/file.controller")
// setup multer
const upload = multer({ storage: multer.memoryStorage() });
// setup the route
router.post("/upload", upload.single("file"), uploadFile);
// export the router
module.exports = router然后让我们设置“index.js”文件。
const express = require("express");
const mongoose = require("mongoose");
const dotenv = require("dotenv");
const cors = require("cors");
// load env variables
dotenv.config();
// import file route
const fileRoute = require("./src/routes/file.route");
// setup express
const app = express();
app.use(express.urlencoded({ extended: true, limit: "100mb" }));
app.use(express.json({ limit: "100mb" }));
app.use(cors());
// setup the file route
app.use(fileRoutes);
const port = 8000
app.listen(port, () => {
console.log(`Server running at port:${port}`);
});打开终端并运行:
`npm start`,如果一切顺利,它应该记录“服务器在端口:8000 运行”。
测试 API
我们将使用 postman 测试 API。

选择正文,检查表单数据,添加一个名为“file”的键并将类型设置为文件。上传您的文件,然后单击发送。
您应该收到如下回复:
{
"data": {
"message": "File uploaded successfully",
"key": "file.png",
"location": "https://cdn.apexxcloud.com/f/ojGnBqCLkTnI/file.png",
"bucket": "your-bucket-name",
"region": "WNAM",
"visibility": "private",
"size": 14513,
"content_type": "image/png"
}
}表示文件已上传。转到您的 Apexx Cloud 仪表板,然后转到您的存储桶,您应该会看到您在那里上传的文件。
就这样,您已成功在 nodejs 中实现文件上传,最好的部分是 Apexx Cloud 为您提供免费的即时转换和超快 CDN。要了解更多信息,请点击此处,要查看文档,请点击此处。
结论
本文成功教会您如何使用 Apexx Cloud 和 Multer 处理 nodejs 应用程序中的文件上传。
在下一篇文章中,我将展示如何使用 AWS S3 进行文件上传,到那时结束 - 你的 FII
**永远不必担心文件上传:**立即注册 Apexx Cloud,免费