什么是对象存储?
要理解我们项目的设计原理,首先需要了解对象存储。传统文件存储系统将文件保存在文件夹层次结构中,就像计算机的文件资源管理器。而块存储系统通常用于数据库,将数据分割成块以提高速度和可靠性。
对象存储则不同。它将每个文件(无论是图像、视频还是文档)视为单个对象。每个对象都与其元数据和唯一标识符一起存储在一个扁平结构中,通常称为存储桶。
这种扁平架构使对象存储几乎可以无限扩展。您无需担心文件路径或目录,只需将对象放入存储桶并获取标识符即可。
我们将构建什么
我们将创建一个简单实用的图像托管服务。其核心功能是允许用户通过HTTP请求发送图像。服务器将接收此图像,处理它,并将其存储在对象存储中。
如何设置项目
首先设置Node.js项目。创建新项目目录,使用npm初始化,并安装所需的依赖项。
|
|
我们将使用Express作为Web服务器,Multer处理文件上传,AWS SDK连接对象存储。
创建对象存储
登录Sevalla并点击"对象存储"。点击"创建对象存储"并为其命名。
创建后,点击"设置",您将看到访问密钥和秘密密钥。我们需要以下四个值:
- 存储桶名称
- 端点URL
- 访问密钥
- 秘密密钥
将它们复制到项目中的.env文件:
|
|
服务器端代码实现
创建server.js文件,实现三个主要路由:
路由1:GET / 应用的入口点,服务包含上传表单的index.html文件。
路由2:POST /upload 处理图像上传的核心端点。使用Multer处理内存中的文件上传,然后使用PutObjectCommand将文件推送到对象存储。
路由3:GET /i/:id 检索上传的图像。生成有效一小时的签名URL,提供对对象存储中文件的临时访问。
本地测试应用
运行以下命令启动本地服务器:
|
|
访问http://localhost:3000/并尝试上传文件。成功上传后应返回查看文件的URL。
在Sevalla上部署项目
首先将项目推送到GitHub。然后登录Sevalla仪表板并创建新应用程序。
连接GitHub账户,选择包含图像托管服务的存储库。Sevalla将自动检测为Node.js项目并安装依赖项。
在应用的环境变量部分添加AWS凭证和存储桶信息。添加环境变量后,转到"概述"并点击"部署"。
部署完成后,Sevalla将提供实时URL。点击"访问APP"转到应用页面。
为什么这个项目很重要
这个项目不仅仅是一个编码练习。它教会您现代应用程序如何大规模管理文件,介绍对象存储,并展示如何将云服务集成到自己的项目中。
通过Sevalla,您还学习了如何部署生产就绪的应用程序,完成了从本地原型到实时云服务的完整周期。
结论
我们首先探讨了对象存储及其为什么适合处理图像等文件。然后构建了一个Node.js应用程序,接受上传,将它们存储在Sevalla的对象存储中,并返回可访问的URL。最后,我们将应用程序部署到Sevalla,将本地项目转变为实时图像托管服务。
完成这个项目后,您现在拥有一个可以扩展和适应的可工作图像托管服务。您可以添加身份验证、图像调整大小或更好的前端界面等功能。最重要的是,您体验了现代软件开发中开发和部署的整合过程。