12/08/2018, 15:21

Amazon S3 (upload file with Java)

What Is Amazon S3? Amazon S3 (Amazon Simple Storage Service ) là dịch vụ lưu trữ file trên Internet của Amazon. Nó được thiết kễ chủ yếu để hỗ các trang web lớn dễ dàng phát triển. Amazon có nhiều dịch vụ đơn giản để lưu trữ dữ liệu với số lượng lớn và truy xuất ở bất kỳ đâu trên web. Nó cung cấp ...

What Is Amazon S3?

Amazon S3 (Amazon Simple Storage Service ) là dịch vụ lưu trữ file trên Internet của Amazon. Nó được thiết kễ chủ yếu để hỗ các trang web lớn dễ dàng phát triển. Amazon có nhiều dịch vụ đơn giản để lưu trữ dữ liệu với số lượng lớn và truy xuất ở bất kỳ đâu trên web. Nó cung cấp cho nhà phát triển truy cập vào vùng lưu trữ dữ liệu nhanh chóng, đáng tin cậy mà chi phí thấp, không tốn kém. Dịch vụ này tối đa hóa những lợi ích đối với nhà phát triển sử dụng dịch vụ.

Introduction to Amazon S3

Phần giới thiệu về Amazon S3 nhằm cung cấp cho bạn cái nhìn về khái lược nhưng không kém phần chi tiếp về dịch vụ này.

Overview of Amazon S3 and This Guide

Với Amazon S3 bạn có thể lưu trữ và truy xuất với lượng dữ liệu ở bất kỳ đâu, bất kỳ lúc nào trên web. Hướng dẫn này mô tả cách bạn gửi yêu cầu để tạo nhóm (buckets), lưu trữ và truy xuất dữ liệu của mình và quản lý quyền trên các tài nguyên của bạn. Hướng dẫn cũng mô tả kiểm soát truy cập và quá trình xác thực. Xác định các đối tượng được phép truy cập tài nguyên nào, được phép truy cập buckest nào, và loại quyền được cấp (READ and WRITE, ...)

Advantages to Amazon S3

Amazon được xây dựng với một bộ tính năng tối thiểu tập trung vào sự đơn giản nhưng mạnh mẽ. Dưới đây mà một số ưu điểm:

  • Create buckets (tạo nhóm) : Tạo ra một nhóm để lưu trữ dữ liệu.
  • Store data in Buckets (lưu dữ liệu vào nhóm) : Tải lên dữ liệu bạn muốn lưu trữ vào Buckets, mỗi đối tượng tải lên có thể chứa tới 5TB dữ liệu. Mỗi đối tượng được lưu trữ và truy xuất bằng một key do Amazon chỉ định.
  • Download data (tải dữ liệu) : Tải dữ liệu hoặc cho phép người khác tải dữ liệu của bạn bất cứ khi nào.
  • Permissons (sét quyền truy cập) : Cấp quyền truy cập cho người khác để họ có thể download hoăc upload dữ liệu lên buckets của bạn. Cơ chế này giúp dữ liệu của bạn an toàn hơn.
  • Standard interfaces (giao diện chuẩn) : sử dụng REST dựa trên thiết kế chuẩn để để làm việc với bất kỳ bộ công cụ phát triển nào trên Internet.

Amazon S3 Concepts

Một số khái niệm về Buckets (nhóm lưu trữ), Object (đối tượng lưu trữ), Key (khóa để truy xuất dữ liệu) bạn có thể xem tại đây

  • Regions Bạn có thể lựa chọn khu vực địa lý, nơi mà Amazon lưu trữ Buckets bạn tạo ra. Amazon hiện tại đang hỗ trợ một số khu vực :
  • US East (N. Virginia) Region Uses Amazon S3 servers in Northern Virginia
  • US East (Ohio) Region Uses Amazon S3 servers in Columbus Ohio
  • US West (N. California) Region Uses Amazon S3 servers in Northern California
  • US West (Oregon) Region Uses Amazon S3 servers in Oregon
  • Canada (Central) Region Uses Amazon S3 servers in Canada
  • Asia Pacific (Mumbai) Region Uses Amazon S3 servers in Mumbai
  • Asia Pacific (Seoul) Region Uses Amazon S3 servers in Seoul
  • Asia Pacific (Singapore) Region Uses Amazon S3 servers in Singapore
  • Asia Pacific (Sydney) Region Uses Amazon S3 servers in Sydney
  • Asia Pacific (Tokyo) Region Uses Amazon S3 servers in Tokyo
  • EU (Frankfurt) Region Uses Amazon S3 servers in Frankfurt
  • EU (Ireland) Region Uses Amazon S3 servers in Ireland
  • EU (London) Region Uses Amazon S3 servers in London
  • South America (São Paulo) Region Uses Amazon S3 servers in Sao Paulo

Note: Việc lựa chọn khu vực địa lý sẽ tối ưu hóa độ trễ tải cho ứng dụng của bạn. Để biết chi tiếp điểm cuối Amazon cung cấp các bạn có thể xem tại đây.

Common Operations

Dưới đây là các hoạt động phổ biến nhất bạn sẽ thực hiện thông qua API

  • Create a Buckets : tạo một nhóm (Buckets) để lưu trữ dữ liệu của bạn.
  • Write a object : khi bạn tạo mới hoặc ghi đè dữ liệu, bạn chỉ định một khóa duy nhất trong không gian tên trong nhóm trong nhóm đó. Đây là thời điểm tốt để bạn kiểm soát quyền truy cập dữ liệu mà bạn muốn trên đối tượng bạn vừa tạo ra.
  • Read an Object : Bạn có thể đọc dữ liệu qua HTTP hoặc BitTorrent
  • Deleting an Object : Xóa dữ liệu
  • Listing Keys : Liệt kê các khóa nằm trong một trong các nhóm của bạn. Bạn cũng có thể lọc các khóa dựa trên tiền tố của nhóm.

File upload to S3 (with Java)

Đầu tiên bạn cần tạo tài khoản Amazon, cách tạo thì bạn có thể tham khảo tại đây Sau khi tạo và đăng nhập vào https://aws.amazon.com/ thì bạn sẽ thấy màn hình như bên dưới : Ở màn hình trên bạn nhấn chọn button "Create Buckets" thì được màn hình như dưới đây, tiếp đó bạn nhập thông tin cho bucket mới và nhấn chọn button "Create". Vậy là coi như xong việc tạo buckets lưu trữ dữ liệu. Để upload ảnh lên S3 từ code java bạn cần cấp quyền truy cập thông qua Access Key ID. Tạo Access Key ID như sau : Bạn chọn như hình dưới : Màn hình tiếp theo bạn nhấn chọn button "Create New Access Key". Sau đó tải file chứa access key của bạn về Sau khi có access key, tùy thuộc vào từng ngôn ngữ bạn sử dụng để xử lý code upload file lên S3. Giả sử mình đã có thông tin access key và mình lưu trong một file tên là amazon.properties như sau:

/* configure for Amazone S3
   image.projectdemo  la ten buckets ban tao o ben tren */
aws_access_key_id=AKIAJWDDIIPUXXXXXXX
aws_secret_access_key=emLmwlQK0zul1IssXMAPbguA+c6oZ6I2XXXXXX
aws_namecard_bucket=image.projectdemo
aws_url_return_prefix=https://s3-us-west-2.amazonaws.com/image.projectdemo/                

Nếu dùng java và config project bằng maven thì bạn có thể download thư viện tại package dưới đây:

<dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>1.10.12</version>
            <exclusions>
                <exclusion>
                    <groupId>joda-time</groupId>
                    <artifactId>joda-time</artifactId>
                </exclusion>
            </exclusions>
</dependency>

Và đây là class xử lý upload file lên S3

public class S3Util {

    private String awsId;
    private String awsKey;
    private String bucketName;
    private String urlReturn;

    // fileName và pathFile bạn truyền từ một hàm  bên ngoài vào
    public Boolean upload(String fileName, String pathFile) throws IOException {
        getProperties();
        AmazonS3 s3client = new AmazonS3Client(new BasicAWSCredentials(awsId, awsKey));
        try {
            File file = new File(pathFile);
            s3client.putObject(new PutObjectRequest(bucketName, fileName, file));
            return true;
        } catch (AmazonServiceException e) {
            System.out.println("AmazonServiceException: "+ ace.getMessage());
        } catch (AmazonClientException ace) {
            System.out.println("AmazonClientException: "+ ace.getMessage());
        }
    }

    public void getProperties() {
        Properties prop = new Properties();
        FileInputStream propFile1 = null;
        try {
             propFile1 =
                    new FileInputStream( "path.../amazon.properties");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            if (propFile1 != null) {
                prop.load(propFile1);
                awsId = prop.getProperty("aws_access_key_id");
                awsKey = prop.getProperty("aws_secret_access_key");
                bucketName = prop.getProperty("aws_namecard_bucket");
                urlReturn = prop.getProperty("aws_url_return_prefix");
            }
        } catch (IOException ex) {
            System.out.println("getProperties: "+ ex);
        } 
    }
}

Như vậy là mình vừa giới thiệu qua về Amazon S3, và cách thức để upload ảnh. Cảm ơn mọi người đã theo dõi bài viết.

0