环境部署
安装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
执行结果返回: