首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

使用 minio 当作网站后端文件存储的一些疑问

  •  
  •   ttxshang · 253 天前 · 1577 次点击
    这是一个创建于 253 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在考虑使用 minio 替换掉文件系统来存放用户上传的文件(包含压缩包,图片,视频,音频等) 然后,查看官方文档和相关事例代码有些疑问,想请教下。

    1. 如果使用 minio 当存储的话,用户上传文件的流程是不是这样的?用户把文件传到网站服务器上,然后,网站后端再利用 minio 的 sdk 把已经传到服务器的文件传到 minio 的相关服务器上面?

    2. 如果流程不是这样的话,前端直接调用 minio javascript 相关 api 的把文件传到 minio 的服务器上,怎么解决 secretAccessKey 会在前端暴露的问题?

    3. 如果用户上传的是压缩包的话,minio 是否可以实现解压,浏览压缩包相关信息的功能?(如果 minio 原生不支持,按照我的理解就是需要在后端服务器上面,先解压然后再上传 minio 的服务器上,不知道这样的想法对不对?)

    4. minio 支持创建文件夹吗?

    6 回复  |  直到 2019-10-11 11:28:06 +08:00
        1
    lynskylate   253 天前 via Android
    对象存储一般是 1,公有读私有写。
    minio 提供的 sdk 没有压缩选项。
    不支持创建文件夹,在命名时注意区分即可。
        2
    msg7086   252 天前
    minio 我不清楚,但是按理是有一次性 token 直传方案的。
        3
    leopku   252 天前
    minio 支持创建文件夹,不过文件夹创建需要的权限较高,不建议直接前端 JS 调用
    合理的方法还是在服务端包一下
        4
    vZexc0m   252 天前 via Android
    1.可以由后端做文件上传中转。
    2.可以由后端生成有时效的前端直传 minio 的连接。
    3.不支持压缩。
    4.可以创建文件夹。
        5
    THESDZ   58 天前
    https://sandyghai.github.io/AWS-S3-Multipart-Upload-Using-Presigned-Url/
    可以生成预签名,分片上传时,每一个分片都可以生成预签名
    实际上每个地址都可以生成预签名
    ```
    Aws4PresignerParams params = Aws4PresignerParams.builder()
    // .expirationTime(storageTemplate.processExpires(expires))
    .awsCredentials(storageTemplate.getCredentials())
    .signingName("s3")
    .expirationTime(Instant.now().plusSeconds(storageTemplate.getExpiresOrDefault(expires)))
    .signingRegion(Region.of(storageTemplate.processRegion(region)))
    .build();
    SdkHttpFullRequest request = SdkHttpFullRequest.builder()
    .encodedPath(storageTemplate.processPath(bucketName, key) + "?uploadId=" + uploadId + "&partNumber=" + partNumber)
    .host(storageTemplate.getHost())
    .method(SdkHttpMethod.PUT)
    .protocol(storageTemplate.getProtocol())
    .build();
    return AwsS3V4Signer.create().presign(request, params).getUri().toString();
    ```
        6
    THESDZ   58 天前
    5 楼的代码有点问题,参数不能拼接在 path 后面,而是
    appendRawQueryParameter("name","value")
    下面具体代码
    使用的 sdk 是

    ```
    <dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>s3</artifactId>
    </dependency>

    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>bom</artifactId>
    <version>2.9.9</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    </dependencies>
    </dependencyManagement>

    ```
    ###############


    Aws4PresignerParams params = Aws4PresignerParams.builder()
    // .expirationTime(storageTemplate.processExpires(expires))
    .awsCredentials(storageTemplate.getCredentials())
    .signingName("s3")
    .expirationTime(Instant.now().plusSeconds(storageTemplate.getExpiresOrDefault(expires)))
    .signingRegion(Region.of(storageTemplate.processRegion(region)))
    .build();
    SdkHttpFullRequest request = SdkHttpFullRequest.builder()
    .encodedPath(storageTemplate.processPath(bucketName, key))
    .host(storageTemplate.getHost())
    .appendRawQueryParameter("uploadId", uploadId)
    .appendRawQueryParameter("partNumber", String.valueOf(partNumber))
    .method(SdkHttpMethod.PUT)
    .protocol(storageTemplate.getProtocol())
    .build();
    return AwsS3V4Signer.create().presign(request, params).getUri().toString();
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   825 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 19:42 · PVG 03:42 · LAX 11:42 · JFK 14:42
    ♥ Do have faith in what you're doing.