文章目录
一,图片云存储
这张图展示了文件存储的几种常见模式:
- 普通上传
- 分布式情况下的普通上传
- 使用自建服务器
- 云存储服务的情况
-
普通上传:在这种情况下,浏览器直接将文件上传给商品服务,然后由商品服务保存文件。这种方式简单明了,但是存在单点故障风险,因为所有文件都在同一台服务器上存储。
-
分布式情况下的普通上传:这是一种改进后的版本,多个商品服务共享同一个文件存储空间。然而,这种方案仍然需要自己维护文件存储基础设施,包括搭建和维护 FastDFS 或 vsftpd 文件系统,这可能会带来较高的前期成本和维护负担。
-
自建服务器:商品服务将文件上传至自建的文件存储服务器。虽然这种方式可以实现一定的分布式的文件存储,但它需要自行搭建和维护,包括硬件投入、网络带宽、存储容量规划等,因此初期成本较高,且后期维护成本也不低。
-
云存储:云存储(如阿里云对象存储或七牛云存储)提供了一种即开即用的服务,不需要自己购买和维护硬件设备,只需要按需付费。这种方式降低了前期投入,同时也减少了运维压力。
二,阿里云OSS
1,OSS
阿里云OSS(Object Storage Service)是阿里云提供的一种大规模、安全、低成本、高可靠的云存储服务。OSS使用了一套特有的资源术语来描述其服务中的各种组件和概念。
下面是一些主要的资源术语及其含义:
-
Bucket(存储空间):
- Bucket 是您用于存储对象(Object)的容器。
- 所有的对象都必须隶属于某个存储空间。
- 存储空间名称在整个OSS中是唯一的,一旦创建就不能更改名称,也不能移动对象到其他存储空间。
-
Object(对象/文件):
- Object 是OSS存储数据的基本单元,也被称为OSS的文件。
- 每个对象都有一个键(Key),用于唯一标识该对象。
- 对象由数据(Data)和元数据(Metadata)组成。
- 数据可以是任何格式的内容,比如文本、图片、视频等。
- 元数据是对对象的一些描述信息,例如Content-Type、创建时间等。
-
Key(对象名/键):
- Key 是用于唯一标识一个对象的字符串。
- Key 的长度必须介于1到1023字节之间,采用UTF-8编码。
- Key 的命名规则比较宽松,但推荐使用有意义的命名以便于管理和检索。
-
Endpoint(访问域名):
- Endpoint 是OSS对外提供服务的访问地址。
- 每个地域(Region)都有自己的Endpoint。
- 用户通过Endpoint来访问存储在特定地域的Bucket。
-
Region(地域):
- Region 是指阿里云在全球部署的物理位置。
- 在每个Region内部署有一个或多个数据中心。
- 用户可以选择在哪个Region创建Bucket。
-
Security(安全):
- OSS 提供多种安全措施来保护数据的安全性。
- 包括但不限于身份验证、访问控制列表(ACL)、Bucket Policy、服务器端加密等。
-
Versioning(版本控制):
- 版本控制是指OSS为每个对象保留多个版本的能力。
- 开启版本控制后,无论何时上传同名对象,都会作为一个新版本被保存下来。
-
Lifecycle Management(生命周期管理):
- 生命周期管理是OSS提供的用于自动管理对象生命周期的规则集。
- 可以设置对象在一定条件下的过期、归档或转换存储类型等。
-
CORS(跨源资源共享):
- CORS 是一种安全机制,用于允许跨域的HTTP请求。
- 可以配置Bucket的CORS规则来允许跨域访问。
-
Logging(日志记录):
- OSS 支持记录Bucket的操作日志,帮助用户追踪Bucket上的操作行为。
2,基于OSS的文件上传架构
-
用户请求上传Policy:用户(可以是网页上的用户或者移动设备上的用户)向应用服务器发送请求,要求获取上传Policy。这个过程通常是在前端发起的,例如在网页上点击"上传文件"按钮时。
-
应用服务器返回上传Policy:应用服务器收到用户的请求后,生成一个上传Policy并返回给用户。上传Policy是一段JSON格式的数据,包含了允许用户上传文件的一些限制条件,比如
密钥
、最大文件大小、可上传的文件类型等。 -
用户直接上传数据到OSS:用户拿到上传Policy后,就可以直接将数据上传到OSS了。这里需要注意的是,用户并不是直接将数据传给应用服务器,而是通过OSS提供的API接口将数据上传到云端。这样做的好处是可以减轻应用服务器的压力,同时也能保证数据的安全性和可靠性。
总的来说,这种架构设计使得用户可以直接与OSS进行交互,而不需要经过应用服务器,从而提高了系统的性能和稳定性。
同时,由于上传Policy的存在,也可以对用户的上传行为进行一定的控制和管理。
3,Java中使用OSS
在Java中,可以使用阿里云的OSS SDK来操作对象存储服务(OSS)。以下是一个简单的示例,展示了如何使用OSS SDK上传文件到OSS:
首先,你需要在你的项目中添加OSS SDK的依赖。如果你使用的是Maven,你可以在pom.xml文件中添加以下依赖:
xml
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.12.0</version>
</dependency>
然后,你可以创建一个OSSClient实例,并使用它来上传文件:
java
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
public class OSSSample {
public static void main(String[] args) {
String endpoint = "<YourEndpoint>";
String accessKeyId = "<YourAccessKeyId>";
String accessKeySecret = "<YourAccessKeySecret>";
String bucketName = "<YourBucketName>";
String objectName = "<YourObjectName>";
String localFile = "<YourLocalFile>";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传本地文件到OSS。
ossClient.putObject(bucketName, objectName, localFile);
// 关闭OSSClient。
ossClient.shutdown();
System.out.println("Upload success.");
}
}
在这个示例中,你需要替换<YourEndpoint>
、<YourAccessKeyId>
、<YourAccessKeySecret>
、<YourBucketName>
、<YourObjectName>
和<YourLocalFile>
为你的实际值。
注意:上传文件后,不要忘记关闭OSSClient。