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

前景提要:

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

使用步骤

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

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

         3.在maven 中引入依赖

         

<dependency> 
 <groupId>com.aliyun.oss</groupId> 
<artifactId>aliyun-sdk-oss</artifactId> 
<version>2.8.3</version> 
</dependency>

          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.引入依赖

<dependency> 
 <groupId>com.aliyun.oss</groupId> 
<artifactId>aliyun-sdk-oss</artifactId> 
<version>2.8.3</version> 
</dependency>

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;

    }

将文件上传到Oss封装成一个Util工具类,直接内部使用方法将文件上传

  • upload()方法作用:调用upload()方法将文件上传到Oss,并将Url地址返回,通过Url地址可直接访问文件
  • upload()方法参数:

                InputStream  , 要上传文件的输入流

                original          ,要上传文件的名字,

public class OssUtil {

 private String endPoint="XXXX";
 private String accessKeyId="XXXX";
 private String accessKeySecret="XXXX";
 private String bucketName="XXX-XX";
  public String upload(InputStream inputStream,String original)
  {
   OSSClient ossClient=new OSSClient(endPoint,accessKeyId,accessKeySecret);
   if(!ossClient.doesBucketExist(bucketName))
   {
    ossClient.createBucket(bucketName);
    ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
   }
   LocalDate date= LocalDate.now();
   DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy/MM/dd");
   String filePath=date.format(formatter);
   String fileName= UUID.randomUUID().toString();
   String fileType=original.substring(original.lastIndexOf("."));
   String path="XXX/"+filePath+"/"+fileName+fileType;
   ossClient.putObject(bucketName,path,inputStream);
   ossClient.shutdown();
   String url="http://"+bucketName+"."+endPoint+"/"+path;
   return  url;
  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值