关闭

java使用AWS S3 SDK 上传文件至 DigitalOcean Spaces

标签: javaDigitalOcean Spacesaws
419人阅读 评论(0) 收藏 举报
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Date;
import java.util.Properties;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;

/**
 * 与云存储服务 digitalocean spaces 通信工具类 
 * 使用 AWS S3 的SDK
 * 
 * 20180131
 * @author fengshi
 * @version 1.0
 */
public class AWSS3Util {
	
	private static final String CONTENT_TYPE_SVG = "image/svg+xml";   
	
    private static String downloadUrl;
    private static String bucketName;   
    
	private static AWSS3Util awsS3Util;
	private static AmazonS3 s3;
	private static ObjectMetadata metadata;
	
	private AWSS3Util(){
		
	}
    
    /**
     * 上传公有文件
     * 
     * @param filePath		待上传文件路径
     * @param key			该文件在bucket中的文件名
     * @param isPub			是否公有
     * @return String		文件访问url
     * @throws FileNotFoundException
     */
    public String putObject(String filePath, String key, boolean isPub) throws FileNotFoundException{
    	return putObject(new File(filePath), key, isPub);
    }
    
    /**
     * 
     * @param file		待上传文件
     * @param key		该文件在bucket中的文件名
     * @param isPub		上传文件是否公有
     * @return String	文件访问url
     * @throws FileNotFoundException
     */
    public String putObject(File file, String key, boolean isPub) throws FileNotFoundException{
    	return putObject(new FileInputStream(file), key, isPub);
    }
    
    /**
     * @param inputStream		待上传文件流
     * @param key				该文件在bucket中的文件名
     * @param isPub				上传文件是否公有
     * @return String			文件访问url
     * @throws FileNotFoundException
     */
    public String putObject(InputStream inputStream, String key, boolean isPub) throws FileNotFoundException{
    	PutObjectRequest request = new PutObjectRequest(bucketName, key, inputStream, metadata);
    	if(isPub) request.setCannedAcl(CannedAccessControlList.PublicRead);
    	s3.putObject(request);
    	return isPub ? new StringBuffer().append(downloadUrl).append(key).toString() : getPublicURL(key, null);
    }
    
    /**
     * 获取文件公有链接
     * 
     * @param key				该文件在bucket中的文件名
     * @param expirationDate 	设置过期时间 无过期时间传null
     * @return
     */
    public String getPublicURL(String key, Date expirationDate){
        GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucketName, key);  
        if (null != expirationDate) urlRequest.setExpiration(expirationDate);
        return s3.generatePresignedUrl(urlRequest).toString();
    }
    
    public static AWSS3Util getInstance(){
		if(awsS3Util == null){
			synchronized (AWSS3Util.class){
				if (awsS3Util == null) {
					awsS3Util = new AWSS3Util();
					Properties pro = PropertiesUtils.getProperties();
					s3 = AmazonS3ClientBuilder.standard()
			                .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(pro.getProperty("aws.accessKey"), pro.getProperty("aws.secretKey"))))
			                .withEndpointConfiguration(new EndpointConfiguration(pro.getProperty("aws.endpointUrl"), pro.getProperty("aws.region")))
			                .build();
					metadata = new ObjectMetadata();
					metadata.setContentType(CONTENT_TYPE_SVG);//目前只用于上传svg v1.0
					downloadUrl = pro.getProperty("aws.downloadUrl");
					bucketName = pro.getProperty("aws.bucketName");
				}
			}
		}
		return awsS3Util;
	}
}
<dependency>
	<groupId>com.amazonaws</groupId>
	<artifactId>aws-java-sdk</artifactId>
	<version>1.11.257</version>
</dependency>

关于创建连接时几个参数的对应关系:

这是我在DigitalOcean Spaces网页后台上传的文件生成的地址

https://hachi.ams3.digitaloceanspaces.com/batik_test10.svg

hachi是bucketName

region是ams3

endpointUrl是ams3.digitaloceanspaces.com

accessKey和secretKey去DigitalOcean Spaces创建

比较坑的是secretKey只在第一次创建accessKey时能看到 我创建第一个accessKey的时候没注意找了好久secretKey





0
0
查看评论

AWS S3 API实现文件上传下载

近日项目需要使用AWS S3的API实现文件的上传和下载功能,才发现网上关于.net实现该功能的文章不多,有几篇也都是很老版本的AWS的使用描述了,写法和封装的类等等都基本上报废了。虽然这样,但还是很感谢那几篇文章,给我指点了方向。
  • marvin198801
  • marvin198801
  • 2015-08-14 16:35
  • 18346

一说就懂的 AWS S3

一说就懂的AWS S3,用简单语言介绍了AWS S3的功能和性能。
  • keithyau
  • keithyau
  • 2016-01-06 15:24
  • 12354

AWS S3 API实现文件上传下载(ASP.NET MVC)

近日项目需要使用AWS S3的API实现文件的上传和下载功能,发现网上很多都是Java版本的,.NET版本很少,其中遇到了几个小问题,在这里写一下方便以后大家开发。     1、首先加入配置,其中标红部分是个坑,因为aws服务器是分地区的,我这里用的是新加坡的aws,...
  • qq_24033949
  • qq_24033949
  • 2016-12-15 15:34
  • 1581

AWS S3上传文件,并获取公用的下载链接

AWS S3上传文件,并获取公用的下载链接
  • u014639561
  • u014639561
  • 2017-06-25 22:27
  • 1728

springBoot通过表单的提交进行AmazonS3 进行文件的上传下载删除(不存储在本地)。

通过客服端进行表单提交文件域,以服务器为媒介进行数据传输到AmazonS3服务器上。 首先在配置文件配置密钥,问公司拿aws.accessKey=AKIAI2AH3BG aws.secretKey=W0pu2gwVnAWAnVAQyP/up01B4v9thfhJ aws.eweBucket=we-...
  • qq_28929589
  • qq_28929589
  • 2018-01-29 20:32
  • 44

AWS EC2上传文件到S3(python boto)

1.获得所有存储桶 >>>import boto.s3.connection >>>conn=boto.s3.connect_to_region('cn-north-1') >>>conn.get_all_buckets()2....
  • yuan13091324
  • yuan13091324
  • 2016-01-15 15:27
  • 1781

Amazon S3 实现文件上传的api以及样例

  • 2011-02-22 22:37
  • 10.73MB
  • 下载

AWS s3 文件上传,下载(Android demo),类似minio

  • 2017-05-12 15:59
  • 19.11MB
  • 下载

文件上传示例(上传到amazon s3服务器)

文件上传示例(上传到amazon s3服务器)action调用上传工具类@Action(value = "files-upload", results = {@Result(name = SUCCESS, location = COMMON_PAGES_R...
  • paradise003
  • paradise003
  • 2017-08-28 16:06
  • 559

Python实现向s3共享存储上传和下载文件

博客原文 安利一篇我翻译的国外大牛的神经网络入门文章 主要是使用boto模块 建立连接 import boto import boto.s3.connection from boto.s3.key import Key conn = boto.connect_s3( ...
  • github_25679381
  • github_25679381
  • 2016-10-27 10:50
  • 4116
    个人资料
    • 访问:439次
    • 积分:26
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档