saltbo / zpan

A self-hosted cloud disk base on the cloud storage./ 一个基于云存储的网盘系统,用于自建私人网盘或企业网盘。
https://zpan.space
GNU General Public License v3.0
1.83k stars 236 forks source link

使用minio存储,无法上传 - url错误 #57

Closed xyz-dev closed 3 years ago

xyz-dev commented 3 years ago

vscode debug master code

zpan.yml:

database:
  driver: sqlite3
  dsn: zpan.db

provider:
  name: s3
  bucket: saltbo-zpan
  endpoint: http://192.168.2.223:9000
  accessKey: minioadmin
  accessSecret: minioadmin
iShot2020-11-16 23 52 34 iShot2020-11-16 23 53 46
saltbo commented 3 years ago

我们需要MinIO启用Virtual Hosted-Style,所以使用Minio的时候需要绑定一个域名,然后需要给MinIO设置环境变量MINIO_DOMAIN=minio.localhost。 https://stackoverflow.com/questions/59693471/how-to-setup-minio-server-to-use-virtual-hosted-style

最后把zpan配置文件中的endpoint设置为 http://minio.localhost 即可

xyz-dev commented 3 years ago

修改了配置 可以上传,图床 预览好像还有问题

provider:
  name: s3
  bucket: zpan
  endpoint: http://mao3.c:9000
  accessKey: minioadmin
  accessSecret: minioadmin

minio 配置了 MINIO_DOMAIN="mao3.c"

docker run -d --name minio  -e MINIO_DOMAIN="mao3.c"  -p 9000:9000  jessestuart/minio server /usr/local/minio/storage

图床 ->添加图片->缩略图错误,在 “全部文件->图片” 下点击查看没有问题

iShot2020-11-17 11 55 58
saltbo commented 3 years ago

这里确实没注意,应该是权限问题,图床的链接是不带签名的,得需要MinIO支持公开访问。可以查下能不能配置

xyz-dev commented 3 years ago

配置策略可行,但图床的图片和其它非公开都放置到一个目录 无法区分设置策略

mc config host add minio http://xxxxx:9000 xxxx xxxx --api s3v4
mc policy set public minio/zpan

https://docs.min.io/docs/minio-client-complete-guide#policy

iShot2020-11-17 15 40 50 iShot2020-11-17 21 08 32

https://docs.min.io/cn/minio-server-limits-per-tenant.html

临时方案解决: 修改源码 rest/bind/file.go 使用一个固定目录存储图床,再配置策略:mc policy set public minio/zpan/.pics

    prefix := timeutil.Format(time.Now(), "YYYYMMDD")
    if p.Public {
        m.ACL = model.AclPublic
        prefix = ".pics"
    }
    m.Object = fmt.Sprintf("%s/%s%s", prefix, m.Alias, filepath.Ext(p.Name))

较好的做法应该是在配置文件中支持这个可选配置并修改provider/provider_s3.go的SignedPutURL方法,可否考虑下?

saltbo commented 3 years ago

确实 目前图床文件没有单独存储到一个独立的目录 后续我们看下怎么优化下