专栏名称: 猿大侠
猿大侠,既然选择了,就一定成为大侠! 小程序、小游戏、Google、苹果、职场、前沿技术分享,一起成长。
目录
相关文章推荐
硅星GenAI  ·  DeepSeek开源周Day 2: ... ·  13 小时前  
硅星GenAI  ·  DeepSeek开源周Day 2: ... ·  13 小时前  
大数据文摘  ·  重磅新书 | ... ·  昨天  
Alibaba Cloud International  ·  跟随阿里云视角——看全球最大规模科技盛会LE ... ·  昨天  
Alibaba Cloud International  ·  跟随阿里云视角——看全球最大规模科技盛会LE ... ·  昨天  
数据派THU  ·  AAAI 2025 | ... ·  3 天前  
李楠或kkk  ·  俄美会谈,俄国给了美国什么??? ... ·  3 天前  
51好读  ›  专栏  ›  猿大侠

自己搭一个 OSS 服务,和阿里云的一毛一样

猿大侠  · 公众号  ·  · 2024-03-02 11:38

正文

转自:神光的编程秘籍

文件上传是常见需求,一般我们不会直接把文件保存在服务器的某个目录下,因为服务器的存储容量是有限的,这样不好扩展。

我们会用 OSS (Object Storage Service)对象存储服务来存文件,它是支持分布式扩展的,不用担心存储容量问题,而且也好管理。

比如阿里云的 OSS 服务。

但是有一些业务场景下,数据需要保密,要求私有部署,也就是要在自己的机房里部署一套 OSS 服务。

这时候怎么办呢?

这种需求一般我们会用 minio 来做。

它可以实现和阿里云 OSS 一样的功能。

首先,我们用一下阿里云的 OSS 服务。

OSS 里的文件是放在一个个 Bucekt(桶)里的:

我们创建个 Bucket:

然后进入文件列表,就可以上传文件了:

因为创建的 Bucket 设置了公共读,所以可以直接访问:

此外,阿里云 OSS 还可以通过 SDK 来上传文件。

创建个项目:

mkdir minio-test
cd minio-test
npm init -y

进入项目,安装 ali-oss:

npm install ali-oss

创建 index.js

const OSS = require('ali-oss')

const client = new OSS({
    region'oss-cn-beijing',
    bucket'guang-666',
    accessKeyId'',
    accessKeySecret'',
});

async function put ({
  try {
    const result = await client.put('smile.png''./smile.png');
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();

填入 region、bucket 和 accessKeyId、accessKeySecret

这里的 region 可以从概览里看到:

acessKey 是在这里看:

具体创建 accessKey 的流程看上篇文章

然后跑一下:

上传成功之后就可以通过 OSS 服务访问这个图片了:

也可以通过 sdk 下载图片:

执行后可以看到,图片被下载下来了:

这就是阿里云 OSS 的用法。

那我们用 minio 自己搭呢?

首先,我们需要安装 docker 桌面端:

打开后可以看到本地的所有镜像和容器:

搜索下 minio(这步需要kexue上网):

填入一些信息:

name 是容器名。

port 是映射本地 9000 和 9001 端口到容器内的端口。

volume 是挂载本地目录到容器内的目录

这里挂载了一个本地一个目录到容器内的数据目录 /bitnami/minio/data,这样容器里的各种数据都保存在本地了。

还要指定两个环境变量,MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD,是用来登录的。

点击 run,跑起来之后可以看到数据目录被标记为 mounted,端口也映射成功了:

访问下 http://localhost:9001

输入刚才环境变量填的用户名密码:

进入管理界面:

这个 bucket 就是管理桶的地方,而 object browser 就是管理文件列表的地方。

和阿里云 OSS 用法一样。

我们创建个 bucket:

然后在这个 bucket 下上传一个文件:

点击 share 就可以看到这个文件的 url:

现在倒是能在浏览器访问,只不过需要带后面的一长串东西:

不带的话会提示拒绝访问:

image.png

因为现在文件访问权限不是公开的。

我们设置下:

添加一个 / 的匿名的访问规则。

然后就可以直接访问了:

是不是感觉用起来和阿里云的 OSS 差不多?

我们再来试试 sdk 的方式:

npm install minio

安装 minio 包。

然后创建 index2.js

var Minio = require('minio')

var minioClient = new Minio.Client({
  endPoint'localhost',
  port9000,
  useSSLfalse,
  accessKey'',
  secretKey'',
})

function put({
    minioClient.fPutObject('aaa''hello.png''./smile.png'function (err, etag{
        if (err) return console.log(err)
        console.log('上传成功');
    });
}

put();

创建用到的 accessKey:







请到「今天看啥」查看全文