pom依賴
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.743</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.11.743</version>
</dependency>
awss3_contents.properties
accessKeyId,secretKey申請aws賬號時給定的,這裏以xxx代替。
## Amazon S3 Build設定用 ##
## AWSAccessKeyId ##
accessKeyId=xxx
## AWSSecretKey ##
secretKey=xxx
## AWSS3のバケット名 ##
bucketName=testbucket
## AWSS3のフォルダ名 ##
folderName=test1
AwsS3Contents AWSS3設定用文言 綁定properties值
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import lombok.Getter;
import lombok.Setter;
/**
* クラス名:AwsS3Contents <br>
* 機能概要:AWSS3設定用文言 <br>
*
* @version 1.0
*/
@Component
@PropertySource(value = "classpath:awss3_contents.properties", encoding = "UTF-8")
@Setter
@Getter
public class AwsS3Contents {
/** AWSAccessKeyId */
@Value("${accessKeyId}")
private String accessKeyId;
/** AWSSecretKey */
@Value("${secretKey}")
private String secretKey;
/** AWSS3のバケット名 */
@Value("${bucketName}")
private String bucketName;
/** AWSS3のフォルダ名 */
@Value("${folderName}")
private String folderName;
}
AmazonS3Util 文件上傳下載
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartFile;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import com.amazonaws.util.IOUtils;
/**
* Amazon S3へファイルの格納
*
* @author
*/
@Configuration
public class AmazonS3Util {
/** AWSS3設定用文言 */
@Autowired
private AwsS3Contents awsS3Contents;
public final String SEPARATOR = "/";
/**
* クライアントをビルド
*
* @return client
*/
private AmazonS3 loadClient() {
// AWS資格の生成
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsS3Contents.getAccessKeyId(), awsS3Contents.getSecretKey());
AWSStaticCredentialsProvider initialCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials);
// S3アクセスクライアントの生成
AmazonS3 client = AmazonS3ClientBuilder.standard().withCredentials(initialCredentialsProvider)
// TODO 日本方のサーバRegionsに修正用
.withRegion(Regions.AP_SOUTH_1).build();
return client;
}
/**
* S3サーバー上の指定したフォルダ直下のファイルの一覧を取得
*
* @param bucketName
* <br>
* @param folderName
* <br>
* @return S3ObjectSummaryリスト <br>
* @throws Exception
* <br>
*/
public List<S3ObjectSummary> getFileList(String bucketName, String folderName) throws Exception {
// AmazonS3Clientインスタンスを作成
AmazonS3 client = loadClient();
final ListObjectsRequest listRequest = new ListObjectsRequest(bucketName, folderName + SEPARATOR, null, SEPARATOR, null);
// S3ObjectSummaryリストを取得
ObjectListing objectList = client.listObjects(listRequest);
List<S3ObjectSummary> list = objectList.getObjectSummaries();
if (list != null && list.size() > 0) {
return list;
}
return null;
}
/**
* S3サーバー上の指定したフォルダ直下のファイル名の一覧を取得
*
* @param bucketName
* バケット名
* @param folderName
* フォルダ名
* @return フォルダ直下のファイル名の一覧 Stringリスト
*/
public List<String> getFileNameList(String bucketName, String folderName) throws Exception {
List<String> fileNameList = new ArrayList<String>();
// S3サーバー上の指定したフォルダ直下のファイルの一覧を取得
List<S3ObjectSummary> s3ObjectList = getFileList(bucketName, folderName);
for (S3ObjectSummary s3Object : s3ObjectList) {
// オブジェクトキーを取得
String key = s3Object.getKey();
if (key != null) {
// フォルダ名の後の部分だけ切り出す
String fileName = key.substring(key.indexOf(folderName + SEPARATOR) + (folderName + SEPARATOR).length());
fileNameList.add(fileName);
}
}
if (fileNameList != null && fileNameList.size() > 0) {
return fileNameList;
}
return null;
}
/**
* ファイルパスとファイル名によりS3サーバーにファイルをアップロード
*
* @param bucketName
* バケット名
* @param folderName
* フォルダ名
* @param localFilePath
* ローカルファイルパス
* @param fileName
* ファイル名
*/
public void uploadFileByName(String bucketName, String folderName, String localFilePath, String fileName) {
// AmazonS3Clientインスタンスを作成
AmazonS3 client = loadClient();
FileInputStream fis = null;
try {
File file = new File(localFilePath + SEPARATOR + fileName);
fis = new FileInputStream(localFilePath + SEPARATOR + fileName);
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(file.length());
final PutObjectRequest putRequest = new PutObjectRequest(bucketName, folderName + SEPARATOR + fileName, fis, objectMetadata);
// アップロード
client.putObject(putRequest);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* ファイルにより、S3サーバーにファイルをアップロード
*
* @param bucketName
* バケット名
* @param folderName
* フォルダ名
* @param file
* ファイル名
*/
public void uploadFileByFile(String bucketName, String folderName, MultipartFile file) {
// AmazonS3Clientインスタンスを作成
AmazonS3 client = loadClient();
try {
// ファイル名
String originalFileName = file.getOriginalFilename();
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType(file.getContentType());
objectMetadata.setContentLength(file.getSize());
// アップロード
client.putObject(bucketName, folderName + SEPARATOR + originalFileName, file.getInputStream(), objectMetadata);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* S3サーバーからファイルをダウンロード
*
* @param bucketName
* バケット名
* @param folderName
* フォルダ名
* @param localFilePath
* ダウンロード先のフルパス
* @param fileName
* ファイル名
*/
public void getObjectFile(String bucketName, String folderName, String localFilePath, String fileName) {
// AmazonS3Clientインスタンスを作成
AmazonS3 client = loadClient();
FileOutputStream fos = null;
try {
GetObjectRequest request = new GetObjectRequest(bucketName, folderName + SEPARATOR + fileName);
S3Object object = client.getObject(request);
if (object != null) {
fos = new FileOutputStream(new File(localFilePath + SEPARATOR + fileName));
IOUtils.copy(object.getObjectContent(), fos);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
調用util
amazonS3Util.uploadFileByName(awsS3Contents.getBucketName(), awsS3Contents.getFolderName(),
erroPathTemp, fileNameAddTimeTxt);
amazonS3Util.getObjectFile(awsS3Contents.getBucketName(), awsS3Contents.getFolderName(), erfilePat, erfileNam);