首页 > 其他分享 >使用新版本Minio的SDK实现文件的上传和下载

使用新版本Minio的SDK实现文件的上传和下载

时间:2022-08-20 10:57:05浏览次数:65  
标签:Minio MinioEnum NAME minio BUCKET getValue file 上传 SDK

一、minio配置信息,为了方便,这里不写在配置文件直接用枚举

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 作者:唐婉
 * 时间:2022/8/15 11:28
 * 描述:minio配置信息
 */
@AllArgsConstructor
@Getter
public enum MinioEnum {
    ADDRESS("http://192.168.100.125:9001","minio地址"),
    BUCKET_NAME("smart-home","存储桶名称"),
    ACCESS_KEY("minioadmin","访问的key"),
    SECRET_KEY("minioadmin","访问的秘钥"),
    AVATAR("avatar","文件在桶中的存放路径"),
    ;
    final String value;
    final String remark;
}

依赖:

        <!-- https://mvnrepository.com/artifact/io.minio/minio -->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.4.3</version>
        </dependency>

        <!-- 官方 miniodemo需要的依赖,没有的话启动会说找不到okhttp啥的;-->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.2</version>
        </dependency>

二、上传

/**
     * 作者: 唐婉
     * 时间: 2022/8/15 11:18
     * 描述: 头像上传
     * 官方文档:https://docs.min.io/minio/baremetal/sdk/java/minio-java.html
     */
    @PostMapping("/upLoadAvatar")public String upLoadAvatar(MultipartFile file) {
        try{

            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint(MinioEnum.ADDRESS.getValue())
                            .credentials(MinioEnum.ACCESS_KEY.getValue(), MinioEnum.SECRET_KEY.getValue())
                            .build();

            //判断存储桶是否已经存在,不存在的话创建
            boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(MinioEnum.BUCKET_NAME.getValue()).build());

            //如果存储桶不存在则要创建
            if (!exists){
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(MinioEnum.BUCKET_NAME.getValue()).build());
            }

            //System.out.println(file.getName());
            //System.out.println(file.getOriginalFilename());
            minioClient.putObject(PutObjectArgs.builder()
                    .bucket(MinioEnum.BUCKET_NAME.getValue())
                    .object(MinioEnum.AVATAR.getValue()+"/"+file.getOriginalFilename())
                    .stream(file.getInputStream(),file.getSize(),-1)
                    .contentType(file.getContentType())
                    .build());
//服务端需要返回一段json串给客户端,application/Json 非必须有默认的
            Map<String, String> reqParams = new HashMap<>();
            reqParams.put("response-content-type", "application/json");

            //得到临时下载地址
            String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
                    .bucket(MinioEnum.BUCKET_NAME
                    .getValue()).object(MinioEnum.AVATAR.getValue()+"/"+ file.getOriginalFilename())
                    .method(Method.GET)
                    .extraQueryParams(reqParams) /*非必须有默认的*/
                    .build());
//自己组装永久下载地址-需要设置桶的权限为ReadAndWrite或只读 String url2=MinioEnum.ADDRESS.getValue()+"/"+MinioEnum.BUCKET_NAME.getValue()+"/"+MinioEnum.AVATAR.getValue()+"/"+file.getOriginalFilename(); return "上传成功了"; }catch (Exception e){ e.printStackTrace(); return "异常了"; } }

三、下载、预览

下载的话可以直接访问上面的地址进行下载

/**
     * 作者: 唐婉
     * 时间: 2022/8/15 11:18
     * 描述: 文件下载、预览
     * https://docs.min.io/minio/baremetal/sdk/java/minio-java.html
     */
    @GetMapping("/downLoadAvatar")
    public void upLoadAvatar2(String name,HttpServletResponse response) throws IOException {
        InputStream in=null;
        try{

            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint(MinioEnum.ADDRESS.getValue())
                            .credentials(MinioEnum.ACCESS_KEY.getValue(), MinioEnum.SECRET_KEY.getValue())
                            .build();

            StatObjectResponse statObject = minioClient.statObject(StatObjectArgs.builder()
                    .bucket(MinioEnum.BUCKET_NAME.getValue())
                    .object(MinioEnum.AVATAR.getValue()+"/"+name)
                    .build());

            /**
             * 描述: content-type 指示响应内容的格式
             * content-disposition 指示如何处理响应内容。
             * 一般有两种方式:
             * inline:直接在页面显示-预览
             * attachment:以附件形式下载-下载
             */
            response.setContentType(statObject.contentType());
//            response.setContentType("image/png");
            response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(name, "UTF-8"));
//            response.setHeader("Content-Disposition", "attachment; filename=" + name);

            in = minioClient.getObject(GetObjectArgs.builder()
                    .bucket(MinioEnum.BUCKET_NAME.getValue())
                    .object(MinioEnum.AVATAR.getValue()+"/"+name)
                    .build());

            IOUtils.copy(in,response.getOutputStream());

        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            if (in != null) {
                in.close();
            }
        }

    }

四、测试预览结果

 

标签:Minio,MinioEnum,NAME,minio,BUCKET,getValue,file,上传,SDK
From: https://www.cnblogs.com/smiles365/p/16607307.html

相关文章

  • 从本机上传资源到服务器端
    从本机上传资源到服务器端自己记录一下,也分享一下。上传单个文件举例:`scpD:\dskop\[email protected]:/root`解释:scp本机文件路径roo......
  • 【文件上传】Spring MVC 文件上传
    (1)文件上传三要素:1、表单的提交方式method="POST"2、表单的enctype属性是多部分表单形式enctype=“multipart/form-data"3、表单项(元素)type="file"<formaction=""m......
  • 文件上传控件-如何上传文件-文件夹上传
    ​第一点:Java代码实现文件上传FormFilefile=manform.getFile();StringnewfileName= null;Stringnewpathname= null;StringfileAddre= "/numUp";try{ ......
  • 签名可执行文件上传Mac App Store
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝➤博主域名:https://www.zengqiang.org➤GitHub地址:https://gith......
  • PHP UPLOAD 实现附件上传
    很早时候写的一些上传功能,现在都换成对象存储了,基本不用原生的了;跨域上传图片;php附件上传备份一下:<?/***上传压缩文件*/publicfunction......
  • Net core中使用System.Drawing对上传的图片流进行压缩
    由于netcore中默认没有System.Drawing,可以通过nuget下载一个来代替System.Drawing.Common 直接压缩图片///<summary>///图片压缩///</summary>///<paramnam......
  • 无网络使用本地maven仓库配置,构建上传sonarqube进行代码检查
    #前提需要本地仓库下存在项目的所有依赖包1.mavensettings.xml文件配置。如果idea和本地mvn环境使用的settings.xml路径不一致。则需要同步修改。<!--#前提需要本......
  • 文件夹上传组件webupload插件
    ​文件夹数据库处理逻辑public class DbFolder{    JSONObjectroot;       public DbFolder()    {        this.root= new JSONOb......
  • 大文件上传组件webupload插件
    ​需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。 第一步:......
  • 如何将typora的文件上传到博客园
    如何将typora的文件上传到博客园1.下载typora在偏好设置中做以下选择2.下载dotnet官网下载地址:https://dotnet.microsoft.com/下载后安装即可,window用户它会直......