网站内容管理系统上传图片(为什么建议大家使用主机服务器和对象存储的本质是? )

优采云 发布时间: 2021-11-17 20:08

  网站内容管理系统上传图片(为什么建议大家使用主机服务器和对象存储的本质是?

)

  为什么推荐使用对象存储?

  对象存储可以简单理解为一个数据池,用于存储图片、音频、视频等非结构化数据。与主机服务器相比,具有读写速度快的特点,有利于共享。

  1、网站 动静态数据分离,大幅提升网页性能

  一般情况下,我们推荐使用宿主服务器和对象存储之间的分工来存储网站数据。主机服务器主要负责存储网站的动态数据,对象存储用于存储网站的静态文件。这样就实现了网站的动静分离。当用户访问一个网站时,数据从宿主服务器和对象存储服务器同步读取,可以大大提高网页的性能。

  理想情况下,它还将与内容分发网络结合使用,我们将在后面讨论。

  2、单一文件管理界面,管理网站文件像本地电脑一样方便

  无论是腾讯云、阿里云还是七牛云,对象存储都有单独的管理控制台,腾讯云和阿里云也有专门的电脑客户端。你不需要打开网站,你可以像百度云盘一样使用对象存储来管理你的网站文件。除了上传、下载、预览等常用功能外,还可以直接将图片存储在对象存储上。处理/媒体转码/数据分析等

  3、 本质是“内置大容量硬盘的分布式服务器”,同一个文件支持跨域共享

  对象存储的本质是“内置大容量硬盘的分布式服务器”。对象存储有自己的CPU、内存、网络和磁盘系统,具有一定的智能化程度。同一个对象存储数据池可以创建不同的bucket。,用于存放不同的网站数据,互不干扰。并且同一个文件可以引用不同的网站,可以有效减少数据冗余。

  4、多存储节点,支持跨地域实时同步,实现异地容灾

  假设你的图片和其他数据存储在你自己的服务器上,你只能通过定期的数据备份来保护你的数据。如果数据量大,每次备份需要大量时间,占用大量磁盘空间,不便于管理。

  如果你的数据放在对象存储的数据池中,并且与网站相关联。那么静态文件的备份就可以交给对象存储了。您只需要备份网站少量的动态文件。节省时间和精力。

  比如我使用对象存储,使用离我最近的节点【深圳】来存储网站的图片等静态文件。但考虑到极端情况,比如深圳节点突然断电,可能会丢失所有数据。但是如果我之前选择【杭州】作为第二个存储节点,并且设置【深圳】节点的数据实时同步到【杭州】节点。所以即使深圳节点的数据丢了,我杭州的数据还是可以用的。当供电恢复后,我可以将杭州节点的数据同步回深圳节点。这就是我们所说的远程容灾。

  5、低成本、灵活的资源扩展、即用即付

  目前,阿里云对象存储(OSS)40G容量一年的价格约​​为9元。腾讯云对象存储(简称cos)拥有50G的免费容量,外加10G的免费下行流量。它已经可以满足大多数个人网站的需求。与服务器的流量不同,它是固定的,它收录在服务器的成本中。无论您是否使用它,都有很多。对象存储可以根据您的实际使用情况计费。

  6、节省服务器空间

  你为什么选择把这一点放在最后?因为现在服务器价格还可以,所以活动比较多。大多数站长不再有服务器空间不足的问题。而对象存储的出现并不是为了解决服务器空间不足的问题。就是结合【块存储】和【文件存储】的优点,实现高效的文件读写和共享。但是节省服务器空间仍然是无可争议的,所以说一下。

  如何使用阿里云准备申请阿里云账号(忽略);激活对象存储功能;创建一个bucket(空间名称);在密钥管理中,创建密钥并获取AccessKey/SecretKey;实际发展

  public function UploadFile(Request $request)

{

$pathName = $request->file('pic')->getPathname();

$url = (new Oss())->aliYunUpload($pathName);

return ['error_code'=>0,'msg'=>'添加成功','data'=>['url'=>$url]];

}

public function aliYunUpload($pathName)

{

// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号 进行API访问或日常运维,请登录RAM控制台创建RAM账号。

$accessKeyId = "";

$accessKeySecret = "";

// Endpoint以杭州为例,其它Region请按实际情况填写。

$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";

// 设置存储空间名称。

$bucket= "";

// 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg

$fileName = md5(time() . $pathName . rand(1111, 999999));

//这里呢我直接把文件后缀固定了,可以根据自己的需要修改

$object = date('Y-m-d', time()) . '/' . $fileName . '.jpg';

//获取二进制文件流

//$content = file_get_contents($pathName);

try {

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

//$content 文件内容,字符串上传

//$ossClient->putObject($bucket, $object, $content);

//文件上传 $pathName临时文件路径

$url = $ossClient->uploadFile($bucket, $object, $pathName)['info']['url'];

//返回文件链接

return $url;

} catch (OssException $e) {

exit($e->getMessage());

}

}

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线