环境部署
安装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
配置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
编写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