方法:
public void uploadFile(String fileUrl, String bucketName, String objectName) throws IOException, MinioException, NoSuchAlgorithmException, InvalidKeyException {
System.out.println("Uploading file from URL: " + fileUrl);
System.out.println("Object name: " + objectName);
try (InputStream inputStream = new URL(fileUrl).openStream()) {
// 获取文件大小
HttpURLConnection connection = (HttpURLConnection) new URL(fileUrl).openConnection();
connection.setRequestMethod("HEAD");
long fileSize = connection.getContentLengthLong();
// 上传文件到 MinIO
minioClient.putObject(bucketName, objectName, inputStream, new PutObjectOptions(fileSize, -1)); // 使用文件大小作为部分大小
System.out.println("File uploaded successfully from URL: " + fileUrl);
} catch (IOException e) {
e.printStackTrace();
System.out.println("Failed to upload file from URL: " + fileUrl);
}
}
- fileUrl(文件的完整URL),bucketName(MinIO存储桶的名称),objectName(对象名称,不包含桶名)
- try (InputStream inputStream = new URL(fileUrl).openStream()) {
尝试打开一个输入流,以读取来自指定 URL 的文件数据。try 后的圆括号内的资源在 try 块结束后会自动关闭。 - HttpURLConnection connection = (HttpURLConnection) new URL(fileUrl).openConnection();
创建一个 HttpURLConnection 对象以便与文件 URL 连接。 - connection.setRequestMethod("HEAD");
设定请求方法为 HEAD。HEAD 请求与 GET 类似,但只请求页面的头部,不返回页面主体。这样可以获得文件的元信息而不需要下载整个文件。 - long fileSize = connection.getContentLengthLong();
获取文件的大小,并将其存储在 fileSize 变量中。这个大小信息用于在上传文件时指定部分大小。 - minioClient.putObject(bucketName, objectName, inputStream, new PutObjectOptions(fileSize, -1));
使用 MinIO 客户端上传文件到指定的存储桶和对象名称。PutObjectOptions 中的 fileSize 确保上传过程中的每个部分大小是有效的。 - MinIO的 putObject 方法在上传大文件时会将其分块上传,这个分块上传需要知道文件的总大小,以便分块合理。