Java使用Base64格式向Minio桶上传图片


Minio介绍

MinIO 是高性能的对象存储,是为海量数据存储、人工智能、大数据分析而设计的,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现,,客户端与存储服务器之间采用http/https通信协议


1.Base64格式上传Minio

前端Js将图片转为Base64格式

 let imageaddr = ""; //图片地址
 var Base64Image = "data:image/png;base64," + wx.getFileSystemManager().readFileSync(imageaddr, "base64")

2.Base64格式上传Minio

pom.xml 引入依赖

          <dependency>
                    <groupId>io.minio</groupId>
                    <artifactId>minio</artifactId>
                    <version>7.0.2</version>
                    <!-- 8.4.2-->
                </dependency>

2.Base64格式上传Minio

实现代码

              @ApiOperation(value = "Minio桶工具类-上传图片", notes = "Minio桶工具类-上传图片")
    @PostMapping(value = "/uploadFile")
    private String uploadFile(@RequestBody JSONObject reqJson) throws InvalidKeyException, IOException, NoSuchAlgorithmException {
        try {

            //你的endpoint,本机可以不变
            String endpoint = "";
            //你的accessKey
            String accessKey = "";
            //你的sercetKey
            String secretKey = "";
            //你的bucket
            String bucketName = "";
            // 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
            MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);

            // 检查存储桶是否已经存在
            boolean isExist = minioClient.bucketExists(bucketName);
            if (isExist) {
                System.out.println("Bucket already exists.");
            } else {
                // 创建一个名为asiatrip的存储桶,用于存储照片的zip文件。
                minioClient.makeBucket(bucketName);
            }


            JSONArray jsonArray = JSONArray.parseArray(reqJson.getString("imageaddr"));
            String ImageAdd = "";
            for (int z = 0; z <= jsonArray.size() - 1; z++) {
                String imageaddr = jsonArray.getJSONObject(z).toString().substring(8, jsonArray.getJSONObject(z).toString().length() - 2);

                // 解密
                Base64.Decoder decoder = Base64.getDecoder();
                // 去掉base64前缀 data:image/jpeg;base64,
                imageaddr = imageaddr.substring(imageaddr.indexOf(",", 1) + 1, imageaddr.length());
                byte[] decode = decoder.decode(imageaddr);
                // 处理数据
                for (int i = 0; i < decode.length; ++i) {
                    if (decode[i] < 0) {
                        decode[i] += 256;
                    }
                }

                InputStream byteArrayInputStream = new ByteArrayInputStream(decode);

                // 生成文件名称
                String nameSuffix = UUID.randomUUID().toString() + ".png";
                String url = "/show?fileName=" + nameSuffix;
                if (z == jsonArray.size() - 1) {
                    ImageAdd += bucketName + "/" + nameSuffix;
                } else {
                    ImageAdd += bucketName + "/" + nameSuffix + ",";
                }


                // 上传配置
                PutObjectOptions options = new PutObjectOptions(byteArrayInputStream.available(), PutObjectOptions.MIN_MULTIPART_SIZE);
                options.setContentType("image/png");
                minioClient.putObject(bucketName, nameSuffix, byteArrayInputStream, options);
            }
            return ImageAdd;
        } catch (MinioException e) {
            System.out.println("Error occurred: " + e);
            return null;
        }
    }

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用 Apache POI 库来读取 Excel 文件并将其转换为 base64 字符串,然后使用 MinIO Java 客户端将其上传到 MinIO。 以下是一个示例代码,假设你已经添加了 Apache POI 和 MinIO 客户端的依赖: ```java import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import io.minio.MinioClient; import io.minio.errors.MinioException; public class ExcelToMinio { private static final String MINIO_ENDPOINT = "http://localhost:9000"; private static final String MINIO_ACCESS_KEY = "minio_access_key"; private static final String MINIO_SECRET_KEY = "minio_secret_key"; private static final String BUCKET_NAME = "my-bucket"; private static final String OBJECT_NAME = "my-file.xlsx"; public static void main(String[] args) { try { // Read Excel file InputStream excelInputStream = new FileInputStream("path/to/my/file.xlsx"); Workbook workbook = new XSSFWorkbook(excelInputStream); // Convert Excel to base64 string ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); workbook.write(outputStream); String base64String = java.util.Base64.getEncoder().encodeToString(outputStream.toByteArray()); // Initialize MinIO client MinioClient minioClient = new MinioClient(MINIO_ENDPOINT, MINIO_ACCESS_KEY, MINIO_SECRET_KEY); // Upload to MinIO InputStream base64InputStream = new java.io.ByteArrayInputStream(base64String.getBytes(StandardCharsets.UTF_8)); minioClient.putObject(BUCKET_NAME, OBJECT_NAME, base64InputStream, base64String.length(), null, null, null); System.out.println("File uploaded successfully"); } catch (IOException | MinioException e) { System.out.println("Error occurred: " + e.getMessage()); } } } ``` 解释一下代码: 1. 在 `main` 方法中,我们首先读取 Excel 文件并将其转换为 `Workbook` 对象。 2. 然后,我们将 `Workbook` 对象写入 `ByteArrayOutputStream` 中,并将其转换为 base64 字符串。 3. 接下来,我们初始化 MinIO 客户端,并使用 `putObject` 方法将 base64 字符串作为输入流上传到 MinIO 中。 4. 如果上传成功,我们将在控制台输出一条消息。 需要注意的是,这个示例代码中仅限于处理 `.xlsx` 格式的 Excel 文件。如果你需要处理 `.xls` 格式的文件,你需要使用 `HSSFWorkbook` 类代替 `XSSFWorkbook` 类。另外,如果你需要上传其他类型的文件,你需要将 `putObject` 方法中的 `contentType` 参数设置为正确的 MIME 类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪杰杰杰杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值