使用Node.js和Sevalla构建并部署图像托管服务

本文详细介绍了如何使用Node.js、Express和Multer构建完整的图像托管服务,集成对象存储技术,并最终部署到Sevalla云平台。从项目设置到生产部署,涵盖前端界面设计、后端API开发、S3兼容存储集成等关键技术环节。

什么是对象存储?

要理解我们项目的设计原理,首先需要了解对象存储。传统文件存储系统将文件保存在文件夹层次结构中,就像计算机的文件资源管理器。而块存储系统通常用于数据库,将数据分割成块以提高速度和可靠性。

对象存储则不同。它将每个文件(无论是图像、视频还是文档)视为单个对象。每个对象都与其元数据和唯一标识符一起存储在一个扁平结构中,通常称为存储桶。

这种扁平架构使对象存储几乎可以无限扩展。您无需担心文件路径或目录,只需将对象放入存储桶并获取标识符即可。

我们将构建什么

我们将创建一个简单实用的图像托管服务。其核心功能是允许用户通过HTTP请求发送图像。服务器将接收此图像,处理它,并将其存储在对象存储中。

如何设置项目

首先设置Node.js项目。创建新项目目录,使用npm初始化,并安装所需的依赖项。

1
2
npm init -y
npm i express multer dotenv @aws-sdk/client-s3 @aws-sdk/s3-request-presigner

我们将使用Express作为Web服务器,Multer处理文件上传,AWS SDK连接对象存储。

创建对象存储

登录Sevalla并点击"对象存储"。点击"创建对象存储"并为其命名。

创建后,点击"设置",您将看到访问密钥和秘密密钥。我们需要以下四个值:

  • 存储桶名称
  • 端点URL
  • 访问密钥
  • 秘密密钥

将它们复制到项目中的.env文件:

1
2
3
4
AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID_HERE
AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY_HERE
S3_BUCKET=YOUR_BUCKET_NAME_HERE
ENDPOINT=YOUR_ENDPOINT_URL_HERE

服务器端代码实现

创建server.js文件,实现三个主要路由:

路由1:GET / 应用的入口点,服务包含上传表单的index.html文件。

路由2:POST /upload 处理图像上传的核心端点。使用Multer处理内存中的文件上传,然后使用PutObjectCommand将文件推送到对象存储。

路由3:GET /i/:id 检索上传的图像。生成有效一小时的签名URL,提供对对象存储中文件的临时访问。

本地测试应用

运行以下命令启动本地服务器:

1
node server.js

访问http://localhost:3000/并尝试上传文件。成功上传后应返回查看文件的URL。

在Sevalla上部署项目

首先将项目推送到GitHub。然后登录Sevalla仪表板并创建新应用程序。

连接GitHub账户,选择包含图像托管服务的存储库。Sevalla将自动检测为Node.js项目并安装依赖项。

在应用的环境变量部分添加AWS凭证和存储桶信息。添加环境变量后,转到"概述"并点击"部署"。

部署完成后,Sevalla将提供实时URL。点击"访问APP"转到应用页面。

为什么这个项目很重要

这个项目不仅仅是一个编码练习。它教会您现代应用程序如何大规模管理文件,介绍对象存储,并展示如何将云服务集成到自己的项目中。

通过Sevalla,您还学习了如何部署生产就绪的应用程序,完成了从本地原型到实时云服务的完整周期。

结论

我们首先探讨了对象存储及其为什么适合处理图像等文件。然后构建了一个Node.js应用程序,接受上传,将它们存储在Sevalla的对象存储中,并返回可访问的URL。最后,我们将应用程序部署到Sevalla,将本地项目转变为实时图像托管服务。

完成这个项目后,您现在拥有一个可以扩展和适应的可工作图像托管服务。您可以添加身份验证、图像调整大小或更好的前端界面等功能。最重要的是,您体验了现代软件开发中开发和部署的整合过程。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计