嗨,在本文中,我们将了解如何在 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 云或在此处创建新帐户
导航到存储桶。
点击“创建存储桶”并为您的存储桶提供唯一的名称。
选择所需区域
查看并创建存储桶
导航至 Api 键
点击“创建 API 密钥”并为您的密钥提供名称
查看并创建密钥
复制您的密钥并将其安全地存储在某个地方。
然后复制您的访问密钥。
让我们开始编写控制器来处理 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}` }); } };
首先,我们导入@apxxcloud/sdk-node,并通过传入凭据来创建一个存储对象。然后我们创建一个名为 uploadFile 的函数,在该函数中我们从 req.query 获取密钥和可见性,从 req.file
获取文件详细信息然后我们使用 apexx cloud sdk 的上传功能将其上传到 apexx cloud。上传时可以配置文件的可见性,可以是公开的也可以是私有的,默认所有文件都是公开的。
现在让我们在 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,如果一切顺利,它应该记录“Server running at port:8000”。
我们将使用 postman 测试 API。
选择Body,检查form-data,添加一个名为file的键,并将类型设置为file。上传您的文件,然后单击“发送”。
您应该得到如下回复:
{ "data": { "message": "File uploaded successfully", "key": "file.png", "location": "https://cdn.apexxcloud.com/f/ojGnBqCLkTnI/file", "bucket": "your-bucket-name", "region": "WNAM", "visibility": "private", "size": 14513, "content_type": "image/png" } }
表示文件已上传。转到您的 Apexx Cloud 仪表板,然后转到您的存储桶,您应该会看到您上传到那里的文件。
就这样,您已经在 Nodejs 中成功实现了文件上传,最棒的是 Apexx Cloud 为您提供了免费的动态转换和超快 CDN。要了解更多信息,请访问此处,要获取文档,请访问此处。
本文已成功教会您如何使用 Apexx Cloud 和 Multer 在 Node.js 应用程序中处理文件上传。
在下一篇文章中,我将展示如何使用 AWS S3 进行文件上传,在此之前签署 - 您的 FII
不用担心文件上传:立即注册 Apexx Cloud,免费
以上是如何在 Nodejs 中实现文件上传:分步指南的详细内容。更多信息请关注PHP中文网其他相关文章!