| | |
| | | } |
| | | } |
| | | @Override |
| | | public void putObject(String bucket, String objectKey, InputStream input, String contentType) { |
| | | try { |
| | | // 检查文件是否已经存在 |
| | | client.statObject(StatObjectArgs.builder().bucket(bucket).object(objectKey).build()); |
| | | throw new RuntimeException("The file already exists: " + objectKey); |
| | | } catch (ErrorResponseException e) { |
| | | // 如果文件不存在,则继续上传 |
| | | log.info("The file does not exist, start uploading."); |
| | | try { |
| | | // 设置 partSize 为 10MB |
| | | long partSize = 10 * 1024 * 1024; // 每块 10MB |
| | | PutObjectArgs.Builder putArgsBuilder = PutObjectArgs.builder() |
| | | .bucket(bucket) |
| | | .object(objectKey) |
| | | .stream(input, -1, partSize); |
| | | |
| | | // 如果提供了 Content-Type,则设置该类型 |
| | | if (contentType != null && !contentType.isEmpty()) { |
| | | putArgsBuilder.contentType(contentType); |
| | | } |
| | | |
| | | // 上传文件 |
| | | ObjectWriteResponse response = client.putObject(putArgsBuilder.build()); |
| | | log.info("Uploaded file successfully: {}, ETag: {}", objectKey, response.etag()); |
| | | |
| | | } catch (MinioException | IOException | InvalidKeyException | NoSuchAlgorithmException ex) { |
| | | log.error("Failed to upload file: {}", objectKey, ex); |
| | | throw new RuntimeException("File upload failed: " + objectKey, ex); |
| | | } |
| | | } catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException e) { |
| | | // 如果 statObject 发生错误,说明服务端错误或其他问题 |
| | | log.error("Failed to check if file exists: {}", objectKey, e); |
| | | throw new RuntimeException("Failed to check if file exists: " + objectKey, e); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void createClient() { |
| | | if (Objects.nonNull(this.client)) { |
| | | return; |