关于框架文件下载的问题

Blade 已结 1 966

一、该问题的重现步骤是什么?

  1. 目前想实现的效果为:一部分文件下载的时候需要登录后才可以下载

  2. 当前系统文件上传后会返回一个地址,该地址可以直接进行下载

  3. 通过看代码,在tool工程里有一个BladeController.java 类,里面封装了相关的下载方法,该下载方法是需要传入一个File类 或者是Resource类。

    image.png

  4.  在MinioTemplate.java 里新增一个获取文件流的方法。

    image.png

  5. 同时在resource工程的OssEndpoint里添加一个方法getInputStream,来调用,获取文件流。

  6. 然后在业务的Controller里新建一个下载的地址(需要鉴权访问这个地址),实现是通过Feign的形式调用OssEndpoint里新建的获取流的方法,然后把文件流转换成File 来调用BladeController.download方法,这样是不是有点繁琐。


    如果是官方实现的话,是怎么处理呢,提供一下相关思路

2. 

3.


二、你期待的结果是什么?实际看到的又是什么?


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

2.8版本

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  •  admin
    admin (最佳回答者)
    2021-04-06 18:36

    一、如果要下载的话,可以把它做成文件流,直接访问这个url就可以下载,所以不需要调用download方法

    二、针对是否需要鉴权,你可以在上传的时候传一个参数flag,如果flag为true则代表鉴权,flag为false则代表不需要鉴权

    三、在minioTemplate的putObject方法就需要针对参数flag来进行判断,如果不需要鉴权,则直接返回minio的地址。如果需要鉴权,那肯定不能返回minio的url,所以这一层需要用后端api来包装

    四、至于考虑到后续有些本来不需要鉴权的api也要鉴权,那么这些数据必然需要进行保存,可以在上传的时候,配置,把oss的url保存到附件表去,然后附件表多加一个字段flag,来代表他是否需要鉴权。

    五、把oss保存到附件表后会获得一个id,同时在putObject返回的url也可以加上这个id,比如https://oss.bladex.cn/attach/1000101010,就可以自定义一个后端的通用api,根据id获取url和flag,然后判断是否需要鉴权,如果鉴权就获取一下AuthUtil.getUser,空则返回未授权,有数据则返回url

    六、这个后端的api职责很简单,只需要实现两步骤:1、根据id查询flag来进行token鉴权,2、根据id到附件表查询url,根据url直接转换为流并返回

    0 讨论(4)
提交回复