1.需要的依赖jar包
1 <dependency>
2 <groupId>com.amazonaws</groupId>
3 <artifactId>aws-java-sdk-s3</artifactId>
4 <version>1.11.233</version>
5 </dependency>
2.访问参数实体
1 public class AmazonS3Bean { 2 3 private static String access_key_id = "access_key_id";// 访问密钥ID 4 private static String secret_key = "secret_key";// 访问密钥 5 private static String end_point = "end_point"; //访问IP及端口号 6 private static String bucketname = "bucketname";//桶名 7 8 private String storageobjectvopath = ""; 9 10 public static String getAccess_key_id() { 11 return access_key_id; 12 } 13 14 public static void setAccess_key_id(String access_key_id) { 15 AmazonS3Bean.access_key_id = access_key_id; 16 } 17 18 public static String getSecret_key() { 19 return secret_key; 20 } 21 22 public static void setSecret_key(String secret_key) { 23 AmazonS3Bean.secret_key = secret_key; 24 } 25 26 public static String getEnd_point() { 27 return end_point; 28 } 29 30 public static void setEnd_point(String end_point) { 31 AmazonS3Bean.end_point = end_point; 32 } 33 34 public static String getBucketname() { 35 return bucketname; 36 } 37 38 public void setBucketname(String bucketname) { 39 AmazonS3Bean.bucketname = bucketname; 40 } 41 42 public String getStorageobjectvopath() { 43 return storageobjectvopath; 44 } 45 46 public void setStorageobjectvopath(String storageobjectvopath) { 47 this.storageobjectvopath = storageobjectvopath; 48 } 49 50 }
3.获取连接
1 public class AmazonUtil {
2 private static AmazonS3 conn; 3 public static BasicAWSCredentials credentials; 4 5 // 创建连接 6 public void creatConnect(AmazonS3Bean s3bean) { 7 8 credentials = new BasicAWSCredentials(AmazonS3Bean.getAccess_key_id(), AmazonS3Bean.getSecret_key()); 9 10 ClientConfiguration clientConfiguration = new ClientConfiguration().withMaxConnections(500) 11 .withProtocol(Protocol.HTTP).withRetryPolicy(PredefinedRetryPolicies.NO_RETRY_POLICY); 12 clientConfiguration.setSignerOverride("S3SignerType"); 13 14 conn = new AmazonS3Client(credentials, clientConfiguration); 15 conn.setEndpoint(AmazonS3Bean.getEnd_point()); 16 17 } 18 19 // 获取连接 20 public AmazonS3 getConnect() { 21 return conn; 22 } 23 24 // 创建存储桶是否存在 25 public Bucket createBucket(String bucketName) { 26 if (bucketName.isEmpty()) { 27 return null; 28 } 29 Bucket bucket = conn.createBucket(bucketName); 30 31 return bucket; 32 } 33 34 // 查询存储桶是否存在 35 public Bucket getBuketsByname(String bucketName) { 36 Bucket resultBucket = null; 37 if (bucketName.isEmpty()) { 38 return null; 39 } 40 List<Bucket> buckets = conn.listBuckets(); 41 if (buckets == null) { 42 return resultBucket; 43 } 44 for (Bucket bucket : buckets) { 45 if (bucketName.equals(bucket.getName())) { 46 resultBucket = bucket; 47 break; 48 } 49 } 50 return resultBucket; 51 } 52 53 public PutObjectResult createObject(String bucketName, String StorageObjectVoPath, String fileName, InputStream inputStream) 54 throws FileNotFoundException { 55 if (StorageObjectVoPath == null || StorageObjectVoPath.isEmpty() || "null".equals(StorageObjectVoPath)) { 56 StorageObjectVoPath = ""; 57 } 58 if (inputStream == null) { 59 return null; 60 } 61 String fileAllPath = StorageObjectVoPath + fileName; 62 63 PutObjectResult result = conn.putObject(bucketName, fileAllPath, inputStream, new ObjectMetadata()); 64 return result; 65 } 66 67 }
4.上传文件
1 public class AmazonS3Upload { 2 3 public static AmazonUtil Upload(AmazonS3Bean s3bean, MultipartFile file, String path) { 4 //创建连接 5 AmazonUtil amazonutil = new AmazonUtil(); 6 amazonutil.creatConnect(s3bean); 7 //获取连接 8 //获取桶 9 Bucket bucket = amazonutil.getBuketsByname(s3bean.getBucketname()); 10 if (bucket == null) { 11 //说明桶不存在,则创建一个默认的桶 12 bucket = amazonutil.creatBucket(s3bean.getBucketname()); 13 } 14 //检查当前容器下该文件目录是否存在 15 try { 16 //上传文件对象到容器 17 amazonutil.creatObject(bucket.getName(), path + "/", file.getOriginalFilename(), file.getInputStream()); 18 } catch (FileNotFoundException e) { 19 e.printStackTrace(); 20 System.out.println("文件上传失败"); 21 } catch (IOException e) { 22 e.printStackTrace(); 23 System.out.println("文件上传失败"); 24 } 25 return amazonutil; 26 } 27 28 }
5.文件下载,将临时连接url返回给web页面
1 AmazonUtil amazonutil = new AmazonUtil(); 2 amazonutil.creatConnect(new AmazonS3Bean()); 3 GeneratePresignedUrlRequest httpRequest = new GeneratePresignedUrlRequest(AmazonS3Bean.getBucketname(), filePath); 4 //临时链接 5 String url = amazonutil.getConnect().generatePresignedUrl(httpRequest).toString();
6.文件删除
1 AmazonUtil amazonutil = new AmazonUtil(); 2 amazonutil.creatConnect(new AmazonS3Bean()); 3 amazonutil.getConnect().deleteObject(AmazonS3Bean.getBucketname(), filePath);