• 如何使用AWS SDK for Java操作Minio Server
    • 1. 前提条件
    • 2. 设置依赖
    • 3. 示例
    • 4. 运行程序
    • 5. 了解更多

    如何使用AWS SDK for Java操作Minio Server

    aws-sdk-java是Java语言版本的官方AWS SDK。本文我们将学习如何使用aws-sdk-java操作Minio Server。

    1. 前提条件

    从这里下载并安装Minio Server。

    2. 设置依赖

    你可以参考AWS Java SDK文档下载并安装aws-java-sdk,或者使用Apache Maven来获得相应的依赖。

    1. <properties>
    2. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    3. <aws.sdk.version>1.11.106</aws.sdk.version>
    4. </properties>
    5. <dependencyManagement>
    6. <dependencies>
    7. <dependency>
    8. <groupId>com.amazonaws</groupId>
    9. <artifactId>aws-java-sdk-bom</artifactId>
    10. <version>${aws.sdk.version}</version>
    11. <type>pom</type>
    12. <scope>import</scope>
    13. </dependency>
    14. </dependencies>
    15. </dependencyManagement>
    16. <dependencies>
    17. <dependency>
    18. <groupId>com.amazonaws</groupId>
    19. <artifactId>aws-java-sdk-s3</artifactId>
    20. </dependency>
    21. </dependencies>
    22. <build>
    23. <plugins>
    24. <plugin>
    25. <groupId>org.apache.maven.plugins</groupId>
    26. <artifactId>maven-compiler-plugin</artifactId>
    27. <configuration>
    28. <source>1.8</source>
    29. <target>1.8</target>
    30. </configuration>
    31. </plugin>
    32. </plugins>
    33. </build>

    3. 示例

    使用下面的代码替换aws-java-sdk-1.11.213/samples/AmazonS3/S3Sample.java,并且修改EndpointBasicAWSCredentialsbucketNameuploadFileNamekeyName成你的本地配置。

    下面的示例描述的是如何使用asw-sdk-java来对Minio Server进行上传和下载操作。

    1. import java.io.BufferedReader;
    2. import java.io.File;
    3. import java.io.IOException;
    4. import java.io.InputStream;
    5. import java.io.InputStreamReader;
    6. import com.amazonaws.AmazonClientException;
    7. import com.amazonaws.AmazonServiceException;
    8. import com.amazonaws.ClientConfiguration;
    9. import com.amazonaws.auth.AWSCredentials;
    10. import com.amazonaws.auth.AWSStaticCredentialsProvider;
    11. import com.amazonaws.auth.BasicAWSCredentials;
    12. import com.amazonaws.client.builder.AwsClientBuilder;
    13. import com.amazonaws.regions.Regions;
    14. import com.amazonaws.services.s3.AmazonS3;
    15. import com.amazonaws.services.s3.AmazonS3ClientBuilder;
    16. import com.amazonaws.services.s3.model.GetObjectRequest;
    17. import com.amazonaws.services.s3.model.PutObjectRequest;
    18. import com.amazonaws.services.s3.model.S3Object;
    19. public class S3Sample {
    20. private static String bucketName = "testbucket";
    21. private static String keyName = "hosts";
    22. private static String uploadFileName = "/etc/hosts";
    23. public static void main(String[] args) throws IOException {
    24. AWSCredentials credentials = new BasicAWSCredentials("YOUR-ACCESSKEYID", "OUR-SECREYTACCESSKEY");
    25. ClientConfiguration clientConfiguration = new ClientConfiguration();
    26. clientConfiguration.setSignerOverride("AWSS3V4SignerType");
    27. AmazonS3 s3Client = AmazonS3ClientBuilder
    28. .standard()
    29. .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://localhost:9000", Regions.US_EAST_1.name()))
    30. .withPathStyleAccessEnabled(true)
    31. .withClientConfiguration(clientConfiguration)
    32. .withCredentials(new AWSStaticCredentialsProvider(credentials))
    33. .build();
    34. try {
    35. System.out.println("Uploading a new object to S3 from a file\n");
    36. File file = new File(uploadFileName);
    37. // 上传文件
    38. s3Client.putObject(new PutObjectRequest(bucketName, keyName, file));
    39. // 下载文件
    40. GetObjectRequest rangeObjectRequest = new GetObjectRequest(bucketName, keyName);
    41. S3Object objectPortion = s3Client.getObject(rangeObjectRequest);
    42. System.out.println("Printing bytes retrieved:");
    43. displayTextInputStream(objectPortion.getObjectContent());
    44. } catch (AmazonServiceException ase) {
    45. System.out.println("Caught an AmazonServiceException, which " + "means your request made it "
    46. + "to Amazon S3, but was rejected with an error response" + " for some reason.");
    47. System.out.println("Error Message: " + ase.getMessage());
    48. System.out.println("HTTP Status Code: " + ase.getStatusCode());
    49. System.out.println("AWS Error Code: " + ase.getErrorCode());
    50. System.out.println("Error Type: " + ase.getErrorType());
    51. System.out.println("Request ID: " + ase.getRequestId());
    52. } catch (AmazonClientException ace) {
    53. System.out.println("Caught an AmazonClientException, which " + "means the client encountered " + "an internal error while trying to "
    54. + "communicate with S3, " + "such as not being able to access the network.");
    55. System.out.println("Error Message: " + ace.getMessage());
    56. }
    57. }
    58. private static void displayTextInputStream(InputStream input) throws IOException {
    59. // 按行读取并打印。
    60. BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    61. while (true) {
    62. String line = reader.readLine();
    63. if (line == null)
    64. break;
    65. System.out.println(" " + line);
    66. }
    67. System.out.println();
    68. }
    69. }

    4. 运行程序

    1. ant
    2. Buildfile: /home/ubuntu/aws-java-sdk-1.11.213/samples/AmazonS3/build.xml
    3. run:
    4. [java] Uploading a new object to S3 from a file
    5. [java]
    6. [java] Printing bytes retrieved:
    7. [java] 127.0.0.1 localhost
    8. [java] 127.0.1.1 minio
    9. [java]
    10. [java] # 对于支持IPv6的主机,会有以下几行输出。
    11. [java] ::1 localhost ip6-localhost ip6-loopback
    12. [java] ff02::1 ip6-allnodes
    13. [java] ff02::2 ip6-allrouters
    14. [java]
    15. BUILD SUCCESSFUL
    16. Total time: 3 seconds

    5. 了解更多

    • Minio Java Library for Amazon S3

    原文: https://docs.minio.io/cn/how-to-use-aws-sdk-for-java-with-minio-server.html