• 使用阿里云OSS上传文件


    本文介绍如何利用Java API操作阿里云OSS对象存储。

    1.控制台操作

    首先介绍一下阿里云OSS对象存储的一些基本概念。

    1.1 进入对象存储界面

    登录阿里云账号,进入对象存储界面,如图所示。

    进入后如图所示。

    1.2 OSS基本概念

    这里不过多介绍如何在阿里云上传下载文件,这些操作基本上点一点都能找到。

    1.2.1 Bucket

    Bucket实质就是阿里云OSS对象存储的一个存储空间,按照计算机理解的话可以理解为一个磁盘(不知道这样比喻是否恰当)。

    创建桶的过程很简单,如图所示,填写对应内容即可。

    这里需要注意,不同分区的Endpoint是不同的,Endpoint在后续API使用过程中会用到。至于存储类型和读写权限相关设置,都结合自身情况来使用,这里以标准存储和私有权限为例进行介绍。

    1.2.2 AccessKey

    AccessKey是访问阿里云API的秘钥,这里也需要提前创建一份,创建后我们需要记住自己的AccessKey ID和Access Key Secret,如果忘记可以在如图位置查询。

    2 API使用

    2.1 API地址

    一般使用对象存储无非就是上传和下载文件,完整API地址如下:

    https://help.aliyun.com/document_detail/32015.html?spm=5176.8466032.bucket-object.1.33ac1450TuX65y

    2.2 API使用准备

    Java使用很简单,直接在Maven中引用依赖,如下:

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

    2.3 构建OSSClient实例

    这里就需要用到我们上面提到的endpoint和AccessKey,构建实例内容如下所示。

    // Endpoint以杭州为例,其它Region请按实际情况填写。
    String endpoint = "http://oss-cn-beijing.aliyuncs.com";
    // 使用刚刚创建的accessKeyId和accessKeySecret
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    
    // 创建OSSClient实例。
    OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    
    //todo 对OSS进行操作
    
    // 关闭OSSClient。
    ossClient.shutdown();
    

    2.4 上传文件

    上传文件常用的方式大致为两种,一种是返回可以查看文件的地址,另外一种是通过地址可以直接下载文件。

    2.4.1 上传文件,返回可以预览图片的地址

    上传文件有一些需要注意的地方:

    • 1.文件名不要重复,不然会覆盖。
    • 2.建议将不同日期的文件分别创建一个文件夹方便区分。

    这里先以上传本地桌面的一个图片为例,上传后在Bucket内自动创建日期格式yyyyMMdd的文件夹存放文件,文件名按照当前时间戳加随机数的形式拼接,由于返回的URL是带有签名信息的,所以这里暂时设置过期时间为一小时,如果需要可以将时间加长。

    完整内容如下所示:

    package com.dalaoyang.upload;
    
    import com.aliyun.oss.OSSClient;
    
    import java.io.File;
    import java.net.URL;
    import java.security.SecureRandom;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class AliyunUpload {
    
        public static void main(String[] args) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            String endpoint = "http://oss-cn-beijing.aliyuncs.com";
            String accessKeyId = "LTAIRr3alAhROGTA";
            String accessKeySecret = "******";
            String fileName = "/Users/dalaoyang/Desktop/aliyun.jpeg";
            String bucketName = "dalaoyang-test";
            // 获取文件的后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            // 生成上传文件名
            String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
            String objectName = sdf.format(new Date()) + "/" + finalFileName;
            File file = new File(fileName);
            OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    
            ossClient.putObject(bucketName, objectName, file);
            // 设置URL过期时间为1小时。
            Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
            // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
            URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
            ossClient.shutdown();
            System.out.println(url.toString());
        }
    }
    
    

    返回地址格式如下:

    http://dalaoyang-test.oss-cn-beijing.aliyuncs.com/20190518/1558155342968407.jpeg?Expires=1558158948&OSSAccessKeyId=LTAIRr3alAhROGTA&Signature=%2BIjVpD%2BTWrRmSt4kU7axo6Cnqbw%3D
    

    浏览器访问如图所示:

    在阿里云OSS中查看如图所示,可以看到文件夹也对应的创建了。

    2.4.2 上传文件,返回可以直接下载图片的地址

    这个和上面其实类似,如果需要返回可以直接下载的地址的话,只要设置一下文件的contentDisposition为attachment;即可,完整内容如下:

    package com.dalaoyang.upload;
    
    import com.aliyun.oss.OSSClient;
    import com.aliyun.oss.model.ObjectMetadata;
    
    import java.io.File;
    import java.net.URL;
    import java.security.SecureRandom;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class AliyunUpload {
    
        public static void main(String[] args) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            String endpoint = "http://oss-cn-beijing.aliyuncs.com";
            String accessKeyId = "LTAIRr3alAhROGTA";
            String accessKeySecret = "******";
            String fileName = "/Users/dalaoyang/Desktop/WechatIMG4.png";
            String bucketName = "dalaoyang-test";
            // 获取文件的后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            // 生成上传文件名
            String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
            String objectName = sdf.format(new Date()) + "/" + finalFileName;
            File file = new File(fileName);
    
            ObjectMetadata meta = new ObjectMetadata();
            meta.setContentDisposition("attachment;");
            OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    
            ossClient.putObject(bucketName, objectName, file, meta);
            // 设置URL过期时间为1小时。
            Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
            // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
            URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
            ossClient.shutdown();
            System.out.println(url.toString());
        }
    }
    
    

    这次返回的地址在浏览器访问直接下载下来了文件。

    3 小结

    对于阿里云OSS操作还是有很多玩法的,比如上传下载带进度条,分段上传等等,需要的话可以根据场景去玩。

  • 相关阅读:
    java中的上转型对象
    java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误
    接口作为参数,不同的接口调用不同的方法,例如:输出“I love Game”或输出“我喜欢游戏”
    JavaScript--原型链
    JavaScript--clientX,clientY、pageX,pageY、offsetLeft,offsetTop/offsetWidth,offsetHeight、scrollLeft,scrollTop/scrollWidth,scrollHeight、clientHeight,clientWidth区别
    JavaScript--结合CSS变形、缩放能拖拽的登录框
    JavaScript--放大镜
    JavaScript--返回顶部方法:锚链接、行内式js写法、外链式、内嵌式
    JavaScript--封装好的运动函数+旋转木马例子
    JavaScript--漏写var却还能使用标签
  • 原文地址:https://www.cnblogs.com/dalaoyang/p/10885424.html
Copyright © 2020-2023  润新知