使用java s3访问ceph rgw

环境部署

安装java :

  yum 卸载原有java

  下载java:jdk-8u201-linux-x64.rpm

  安装java包:rpm -ivh jdk-8u201-linux-x64.rpm

安装maven:

1. http://maven.apache.org/download.cgi 下载apache-maven-3.6.1-bin.tar.gz到新创建目录/usr/local/maven

2. 解压:tar -xvf apache-maven-3.6.1-bin.tar.gz

3. 修改/etc/profile:

增加:export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.1

修改:export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

4.刷新profile: source  /etc/profile

5.测试安装:mvn -version

创建一个java项目

cd /usr/local/maven/apache-maven-3.6.1

执行:mvn -B archetype:generate  -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=org.example.basicapp -DartifactId=myapp

本机不能连外网需要设置代理服务ip地址:

vim /usr/local/maven/apache-maven-3.6.1/conf/settings.xml 

 
   
   
      optional
      true
      http
      proxyuser
      proxypass
      100.69.208.25
      3128
      local.net|some.host.com
   

 

配置myapp项目

1.(红色)把aws-java-sdk-s3包含进来,编译时自动下载

2.(紫色)默认情况下,Maven 将创建一个 Java 1.5 项目。必须将应用程序更新到 Java 1.8

3.(蓝色)手动设置manifest,org.example.basicapp.App是App.java的包名称。

参考:aws官网指导https://docs.aws.amazon.com/zh_cn/sdk-for-java/v2/developer-guide/setup-project-maven.html

vim  /usr/local/maven/apache-maven-3.6.1/myapp/pom.xml  

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  4.0.0
  org.example.basicapp
  myapp
  jar
  1.0-SNAPSHOT
  myapp
  http://maven.apache.org
 
   
      com.amazonaws
      aws-java-sdk-s3
      1.11.443
   

   
      junit
      junit
      3.8.1
      test
   

 

 
   

     
        org.apache.maven.plugins
        maven-compiler-plugin
       
          1.8
          1.8
       

     

     
        maven-assembly-plugin
         
           
             

                org.example.basicapp.App
             

           
           
              jar-with-dependencies

           
         

     

   
 

 
   
     
        com.amazonaws
        aws-java-sdk-bom
        1.11.603
        pom
        import
     

   

 

编写App.java

实现的功能是:输入endpoint,accessKey,secretKey,bucketName,expiration,fileName,versionId参数,给bucketName桶里的文件名为fileName,文件版本号为versionId的文件创建一个expiration秒过期的预签名url。

vim /usr/local/maven/apache-maven-3.6.1/myapp/src/main/java/org/example/basicapp/App.java 

package org.example.basicapp;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.List;
import java.util.Date;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.util.StringUtils;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.S3ObjectSummary;

import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;

public class App
{
    public static void main( String[] args )
    {
        if (args.length < 6) {
          System.out.print( "please input:");
          System.out.println("endpoint,accessKey,secretKey,bucketName,expiration,fileName,versionId(options)" );
        } else {

          String endpoint = args[0];
          String accessKey = args[1];
          String secretKey = args[2];
          String bucketName = args[3];
          int expiration = Integer.valueOf(args[4]);
          String fileName = args[5];
          String versionId = null;
          if (args.length > 6) {
            versionId = args[6];
          }
          AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
          AmazonS3 conn = new AmazonS3Client(credentials);
          conn.setEndpoint(endpoint);
          Date dateTime = new Date();
          long msec = dateTime.getTime();
          msec += 1000 * expiration;
          dateTime.setTime(msec);
          GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName,

                                                                            fileName).withExpirati  on(dateTime);
          if (versionId != null) {
            request.setVersionId(versionId);
          }
          System.out.println(conn.generatePresignedUrl(request));
       }
    }
}

编译打包jar

cd  /usr/local/maven/apache-maven-3.6.1/myapp

执行:mvn clean compile assembly:single

执行jar

cd /usr/local/maven/apache-maven-3.6.1/myapp/target

给tudfkac3xu74cs4rnfzs桶里文件test-for-url-1创建一个900秒过期的预签名url:

执行:java -jar myapp-1.0-SNAPSHOT-jar-with-dependencies.jar  http://100.69.172.4:80 admin_access_key admin_secret_key  tudfkac3xu74cs4rnfzs 900 test-for-url-1

执行结果返回:

http://100.69.172.4:80/tudfkac3xu74cs4rnfzs/test-for-url-1?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20190806T095844Z&X-Amz-SignedHeaders=host&X-Amz-Expires=899&X-Amz-Credential=admin_access_key%2F20190806%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=7a6a347c2ea74a1c5e69137f36959feb953b620b54c6a82025c331473763cc73

 

 

 

你可能感兴趣的:(使用java s3访问ceph rgw)