如何在 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 云

  • 登录 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}` });
      }
    };

    首先,我们导入 `@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。

    Apexx cloud

    选择正文,检查表单数据,添加一个名为“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,免费