xqy404.com

minio 中的上传

关于在 minio 中的上传遇到的问题
2024-08-13

minio 中的上传

关于在 minio 中的上传遇到的问题
4 min read
created on 2024-08-13
#minio
#upload
#oss

在使用 minio 时,遇到了一些问题,这里记录一下。

上传文件

在今天(2024-08-13)之前,我在公司所提供的 minio(版本号:RELEASE.2022-06-11T19-55-32Z)服务中上传文件时,都是用的 File 对象。

备注一下:我所有的上传,都是通过公司提供的一个 JSSDK 方法进行上传的,不清楚是不是这里面做了什么处理,反正上传的文件类型 File/ Blob 对象都是可以的(能正常上传)。

一切都很正常。

但因为特殊原因,在前端对文件进行了压缩,所以上传的文件类型变成了 Blob 对象。(在发现问题之前,因为上传很正常,也能预览。所以我并没有注意到接下来将要提到的问题)

在这里顺便提一嘴关于前端压缩,因为我是需要压缩图片,所以我找了一翻插件,最终选择了 Browser Image Compression,目前觉得还不错。

上传之后

在上传之后,我发现了一个问题,就是上传的文件在 minio 中的文件名是没有文件类型后缀的。虽然能预览/下载,但没有文件类型后缀(之前就有),感觉会在某些场景下有问题。

所以我来进行了一番调查。

起初,我认为是我用的压缩插件的问题:它可能丢失了文件类型的相关信息。

但我去看文档,发现它是有保留文件类型的信息的:不指定 fileType 时,它也会根据文件的 mime 类型来判断文件类型。

比如:

{
  lastModified: 1723529024502,
  name: "bird-8785666.jpg",
  size: 1011406,
  type: "image/jpeg"
}

但,上传到 minio 后,文件名就没有了文件类型后缀。

所以我又对比了下,在出现文件类型后缀丢失的情况前后上传的文件类型:File 和 Blob。

于是我尝试去上传这个从 File => Blob => File 的对象:发现上传后的文件名是有文件类型后缀的。

看了下 minio 的文档,对于“为什么 Blob 对象上传后没有文件类型后缀?”的问题,我并没有找到具体的信息/原因。可能要我自己自建一个 minio 服务,然后去调试才能知道了。

但我又尝试,在上传 File 对象时:

  1. 将文件名改为没有文件类型后缀的名字,发现上传后的文件名也是没有文件类型后缀的。
  2. 将文件名的后缀改为非实际文件类型的,发现上传后的文件名的后缀也是这个非实际文件类型的。比如实际的文件名是 bird-8785666.jpg,我将文件名改为 bird-8785666.png,上传后的文件名就是 bird-8785666.png

所以按目前的设定,这个 minio 服务,是读取的 File 的 fileName 属性内容中的后缀来作为存储时的文件名后缀。

而假如上传的是一个 Blob 对象,那么就永远没有文件类型后缀。虽然 Blob 对象的 type 属性是有文件类型的。

暂时就这样记录下,后面有机会再去调试细究一下。