springCloud微服务通过minio实现文件上传和文件下载接口

博客 分享
0 168
张三
张三 2022-05-11 10:59:04
悬赏:0 积分 收藏

springCloud 微服务通过minio实现文件上传和文件下载接口

 直接上代码吧,好多文章的下载都写的不明不白的,让人理解错,气死了!!

文件上传功能

文件上传很简单,首先你得部署好minio,然后写好配置信息,我的是动态读取nacos上配置的yml

 @Autowired    private MinioConfig minioConfig;    @Autowired    private MinioClient client;      @Autowired    private FileInfoMapper fileInfoMapper;/** * 本地文件上传接口 * @param file 上传的文件 * @return 访问地址 * @throws Exception */@Overridepublic String uploadFile(MultipartFile file) throws Exception{    String fileName = FileUploadUtils.extractFilename(file);    PutObjectArgs args = PutObjectArgs.builder()            .bucket(minioConfig.getBucketName())            .object(fileName)            .stream(file.getInputStream(), file.getSize(), -1)            .contentType(file.getContentType())            .build();    client.putObject(args);    return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;}     /**   * 这个属于业务了,可以参考      * 文件存储路径:     * 业务功能名文件夹+文件UUID+文件类型后缀     * @param file 上传的文件     * @param fileInfo 文件信息表:存储了上传标识等信息(用于区分各个微服务下的各个业务,后面可通过这个标识区分这文件是哪个业务的)     * @return      * @throws Exception     */    @Override    public int uploadFile(MultipartFile file, FileInfo fileInfo) throws Exception    {        //文件UUID        String uuid= IdUtils.fastSimpleUUID();        //文件目录名称        String fileName = FileUploadUtils.extractFilenameByUuid(file, uuid);        // 文件路径        String url = fileInfo.getSid()+ "/" + fileName;        PutObjectArgs args = PutObjectArgs.builder()                .bucket(minioConfig.getBucketName())                .object(fileInfo.getSid()+ "/" + fileName)                .stream(file.getInputStream(), file.getSize(), -1)                .contentType(file.getContentType())                .build();        client.putObject(args);        //上传到minio后,将文件信息保存        fileInfo.setUid(uuid);        fileInfo.setFileName(file.getOriginalFilename());        fileInfo.setFileSize(file.getSize());        fileInfo.setFileType(FileUploadUtils.getExtension(file));        fileInfo.setFilePath(url);        fileInfo.setCreateBy(SecurityUtils.getUsername());        fileInfo.setCreateTime(DateUtils.getNowDate());        return fileInfoMapper.insertFileInfo(fileInfo);    } 

文件下载功能

这里遇到个理解错误的消息,minio提供的getObject方法和downloadObject方法:

1. getObject

GetObject接口用于获取某个文件(Object)。

此操作需要对此Object具有读权限。

获取对象的数据。

InputStream使用后返回必须关闭以释放网络资源。

2. downloadObject

将对象的数据下载到文件

我以为downloadObject就是下载的意思(毕竟英文名也是下载的意思),结果他就是不是下载,而是下载到文件。

下载主要参数是文件保存的目录地址,如:system/task/2022/05/11/daebcc866c7f4c7dad34c55b8abff687.png,而不是这样子的:http://192.168.8.116:9000/test/2022/05/11/logo_20220511103344A001.png

因为:http://192.168.1.1:9000/test/   minio会直接在这下面开始查,test为桶名称bucketName

业务层:

   @Autowired    private MinioConfig minioConfig;    @Autowired    private MinioClient client;        /**     * 下载文件     * @param fileName 下载目录地址 如:system/task/2022/05/11/daebcc866c7f4c7dad34c55b8abff687.png     * @param outputStream http请求中的outputStream     */    @Override    public void  download(String fileName, ServletOutputStream outputStream)    {        try (InputStream inputStream = client.getObject(GetObjectArgs                .builder()                .bucket(minioConfig.getBucketName())                .object(fileName)                .build()))        {            IOUtils.copy(inputStream, outputStream);        }        catch (Exception e)        {            log.error("文件下载异常");            e.printStackTrace();        }    }

控制层

     /**     * 下载文件     * @param uid 文件uid     * @param response     * @throws Exception     */    @GetMapping("/download/{uid}")    public void download(@PathVariable("uid") String uid,HttpServletResponse response) throws Exception    {        //根据文件UUID,查询文件表,得到文件路径目录        String fileName = fileInfoService.selectFilePathById(uid);        System.out.println(fileName);        //调用业务层下载方法        sysFileService.download(fileName,response.getOutputStream());    } 
posted @ 2022-05-11 10:47 changlinlo 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员