Minio预览和下载

1、依赖

<dependency>
   <groupId>io.minio</groupId>
   <artifactId>minio</artifactId>
   <version>8.5.2</version>
</dependency>

2、代码

package utils;

import io.minio.*;
import io.minio.errors.MinioException;
import io.minio.http.Method;
import org.xmlpull.v1.XmlPullParserException;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;

/**
 * minio文件工具类
 * @author leo
 * @date 2023/6/16 18:21
 */
public class MinioFileUtil8 {


    private final static String ENDPOINT = "http://10.16.2.97:19000";
    private final static String ACCESS_KEY = "user";
    private final static String SECRET_KEY = "password";

    /**
     * 删除文件
     * @param args
     * @throws NoSuchAlgorithmException
     * @throws IOException
     * @throws InvalidKeyException
     * @throws XmlPullParserException
     */
    public static void main(String[] args) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException {
        try {

            MinioClient minioClient = MinioClient.builder().endpoint(ENDPOINT).credentials(ACCESS_KEY, SECRET_KEY).build();
            InputStream inputStream = new FileInputStream("C:\\Users\\Dell\\Downloads\\abc.png");
            int available = inputStream.available();
            // 上传参数中指定
            String bucket = "normal";
            String object = "abc.png";
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(bucket)
                    .object(object)
                    // 上传时指定对应对ContentType
                    .contentType(ViewContentType.getContentType("abc.png"))
                    .stream(inputStream, inputStream.available(), -1)
                    .build();
            ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);
            String etag = objectWriteResponse.etag();
            String s = objectWriteResponse.versionId();
            System.out.println(etag);
            System.out.println(s);
            GetPresignedObjectUrlArgs build = GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucket).object(object).build();
            String presignedObjectUrl = minioClient.getPresignedObjectUrl(build);
            System.out.println(presignedObjectUrl);
//
//            boolean b = checkFileExist(ENDPOINT, ACCESS_KEY, SECRET_KEY, bucket, "aaa"+object);
            String ba = generatorOuterLink(ENDPOINT, ACCESS_KEY, SECRET_KEY, bucket, object);
            String baa = generatorPreviewOuterLink(ENDPOINT, ACCESS_KEY, SECRET_KEY, bucket, object);
//            boolean bab = removeFile(ENDPOINT, ACCESS_KEY, SECRET_KEY, bucket, object);
//            System.out.println(b);
            System.out.println(ba);
            System.out.println(baa);
//            System.out.println(available);

//            minioClient.downloadObject(
//                    DownloadObjectArgs.builder()
//                            .bucket("normal")
//                            .object("bg.jpg")
//                            .filename("C:\\Users\\Dell\\Downloads\\down-bg.jpg")
//                            .build());

//            extraQueryParams(reqParams)
        } catch(MinioException e) {
            System.out.println("Error occurred: " + e);
        }
    }


    public static boolean doUpload(String endpoint, String accessKey, String secretKey, String bucketName, String objectName, InputStream inputStream){
        try {
            // 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
            MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(bucketName)
                    .object(objectName)
                    .stream(inputStream, inputStream.available(), -1)
                    .build();
            minioClient.putObject(putObjectArgs);

            return true;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public static boolean doUploadForPreview(String endpoint, String accessKey, String secretKey, String bucketName, String objectName, InputStream inputStream){
        try {
            // 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
            MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(bucketName)
                    .object(objectName)
                    // 上传时指定对应对ContentType
                    .contentType(ViewContentType.getContentType(objectName))
                    .stream(inputStream, inputStream.available(), -1)
                    .build();
            minioClient.putObject(putObjectArgs);

            return true;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }


    /**
     * 验证文件是否存在
     * @param endpoint
     * @param accessKey
     * @param secretKey
     * @param bucketName
     * @param objectName
     * @return true-存在
     */
    public static boolean checkFileExist(String endpoint, String accessKey, String secretKey, String bucketName, String objectName){
        try {
            MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
            StatObjectArgs statObjectArgs = StatObjectArgs.builder().bucket(bucketName).object(objectName).build();
            minioClient.statObject(statObjectArgs);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 生成预览外链
     * @param endpoint
     * @param accessKey
     * @param secretKey
     * @param bucketName
     * @param objectName
     * @return
     */
    public static String generatorPreviewOuterLink(String endpoint, String accessKey, String secretKey, String bucketName, String objectName){
        try {
            MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
            GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder()
                    .method(Method.GET)
                    .bucket(bucketName)
                    .object(objectName)
                    .build();
            String url = minioClient.getPresignedObjectUrl(args);
            return url;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 生成外链
     * @param endpoint
     * @param accessKey
     * @param secretKey
     * @param bucketName
     * @param objectName
     * @return
     */
    public static String generatorOuterLink(String endpoint, String accessKey, String secretKey, String bucketName, String objectName){
        try {
            Map<String, String> reqParams = new HashMap<>(3);
            reqParams.put("response-content-type", "application/octet-stream");
            MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
            GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder()
                    .method(Method.GET)
                    .bucket(bucketName)
                    .object(objectName)
                    .extraQueryParams(reqParams)
                    .build();
            String url = minioClient.getPresignedObjectUrl(args);
            return url;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 删除文件
     * @param endpoint
     * @param accessKey
     * @param secretKey
     * @param bucketName
     * @param objectName
     * @return
     */
    public static boolean removeFile(String endpoint, String accessKey, String secretKey, String bucketName, String objectName){
        try {

            MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
            RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build();
            minioClient.removeObject(removeObjectArgs);
            return true;
        }catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}

3、使用 doUpload 和 doUploadForPreview 上传

4、使用 generatorOuterLink 和 generatorPreviewOuterLink 生成不同的链接(下载或预览)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot与Minio结合可以实现文件预览功能。Minio是一个开源的对象存储服务器,可以很方便地进行文件上传和下载。在Spring Boot项目中集成Minio,可以使用Minio提供的API进行文件操作,如上传、下载、删除等。 为了实现文件预览功能,首先需要在Spring Boot项目中引入Minio的依赖,并配置Minio相关的参数,包括连接地址、用户名和密码等。可以使用Minio客户端库或者直接调用Minio的RESTful API进行文件的操作。 在文件上传时,可以将文件保存到Minio服务器中,并将返回的文件访问路径保存到数据库或者其他地方。在文件预览时,可以根据文件的访问路径将文件内容展示在前端页面上,或者通过Minio提供的预览功能进行文件预览。 需要注意的是,在部署Minio服务器时,需要有两台Linux服务器,每台服务器挂载两块硬盘作为Minio节点。具体的部署过程包括分区、格式化、挂载到指定文件夹。有关具体的部署步骤和命令,可以参考相关的文档或者教程。 综上所述,通过在Spring Boot项目中集成Minio,并配置相关参数,可以实现文件预览功能。文件上传时保存文件到Minio服务器,文件预览时通过文件的访问路径展示文件内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [文件服务器mino实现文件存储和文件预览接口](https://download.csdn.net/download/song12345xiao/86261449)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [springboot整合minio实现文件上传下载](https://blog.csdn.net/weixin_41964243/article/details/127832843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值