使用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 

  <proxies>
    <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     | -->
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>100.69.208.25</host>
      <port>3128</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
  </proxies>
配置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  

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example.basicapp</groupId>
  <artifactId>myapp</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>myapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-s3</artifactId>
      <version>1.11.443</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
          <configuration>
            <archive>
             
<manifest>
                <mainClass>org.example.basicapp.App</mainClass>
              </manifest>

            </archive>
            <descriptorRefs>
              <descriptorRef>jar-with-dependencies</descriptorRef>

            </descriptorRefs>
          </configuration>

      </plugin>

    </plugins>
  </build>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-bom</artifactId>
        <version>1.11.603</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

</project>

编写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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值