如何在 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,免费