Java代码操作阿里云OSS实现上传文件等操作

前景提要:

   实战开发过程中应用阿里云OSS的技巧

使用步骤

         1.在阿里云上开通OSS,创建bucket

         2.创建阿里云OSS许可证Accesskey,得到id和密钥

         3.在maven 中引入依赖

         

 
 com.aliyun.oss 
aliyun-sdk-oss 
2.8.3 

          4.创建bucket连接

public class OSSTest {
 // Endpoint以杭州为例,其它Region请按实际情况填写。
 String endpoint = "your endpoint";  
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问
                                                                            
 String accessKeyId = "your accessKeyId"; 
 String accessKeySecret = "your accessKeySecret";
 String bucketName = "guli-file";

 @Test
//测试bucket连接
 public void testCreateBucket() {

 // 创建OSSClient实例。
 OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);

 // 创建存储空间。
 ossClient.createBucket(bucketName);

 // 关闭OSSClient。
 ossClient.shutdown();
}
//判断存储空间是否存在
@Test
 public void testExist() {
 // 创建OSSClient实例。
 OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
 boolean exists = ossClient.doesBucketExist(bucketName);
 System.out.println(exists);

 // 关闭OSSClient。
 ossClient.shutdown();
 }
//设置存储空间的访问权限
@Test
 public void testAccessControl() {
 // 创建OSSClient实例。
 OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
 // 设置存储空间的访问权限为:公共读。
 ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);

 // 关闭OSSClient。
 ossClient.shutdown();
 }
}

整合springboot

1.引入依赖

 
 com.aliyun.oss 
aliyun-sdk-oss 
2.8.3 

2.配置文件中加入

#阿里云 OSS
 #不同的服务器,地址不同
 aliyun.oss.file.endpoint=
 aliyun.oss.file.keyid=
 aliyun.oss.file.keysecret=
 #bucket可以在控制台创建,也可以使用java代码创建
 aliyun.oss.file.bucketname=

3.创建工具类,可以直接使用Oss所需要的属性值

@Component
public class ConstantPropertiesUtil implements InitializingBean {
    @Value("${aliyun.oss.file.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.file.keyid}")
    private String keyId;
    @Value("${aliyun.oss.file.keysecret}")
    private String keySecret;
    @Value("${aliyun.oss.file.bucketname}")
    private String bucketName;
    public static String END_POINT;
 public static String ACCESS_KEY_ID;
 public static String ACCESS_KEY_SECRET;
 public static String BUCKET_NAME;

    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = endpoint;
         ACCESS_KEY_ID = keyId;
        ACCESS_KEY_SECRET = keySecret;
        BUCKET_NAME = bucketName;
    }
}

 4.编写具体业务

参数file是前端上传的文件

返回值是文件上传到阿里云Oss后的url地址

其中

new DateTime()是joda-time包下的把时间加入到url中,把上传的文件根据日期时间进行分类

  public String upload(MultipartFile file) {
        //获取阿里云存储相关常量
        String endPoint = ConstantPropertiesUtil.END_POINT;
        String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtil.BUCKET_NAME;


        String uploadUrl = null;

        try {
            //判断oss实例是否存在:如果不存在则创建,如果存在则获取
            OSSClient ossClient = new OSSClient(endPoint, accessKeyId,
                    accessKeySecret);
            if (!ossClient.doesBucketExist(bucketName)) {
                //创建bucket
                ossClient.createBucket(bucketName);
                //设置oss实例的访问权限:公共读
                ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
            }

            //获取上传文件流
            InputStream inputStream = file.getInputStream();

            //构建日期路径:avatar/2019/02/26/文件名
            String filePath = new DateTime().toString("yyyy/MM/dd");

            //文件名:uuid.扩展名
            String original = file.getOriginalFilename();
            String fileName = UUID.randomUUID().toString();
            String fileType = original.substring(original.lastIndexOf("."));
            String newName = fileName + fileType;
            String fileUrl = filePath + "/" + newName;

            //文件上传至阿里云
            ossClient.putObject(bucketName, fileUrl, inputStream);

            // 关闭OSSClient。
            ossClient.shutdown();

            //获取url地址
            uploadUrl = "http://" + bucketName + "." + endPoint + "/" + fileUrl;

        } catch (IOException e) {

        }

        return uploadUrl;

    }

你可能感兴趣的:(项目实战技巧,java,阿里云,服务器)