首页 > 编程语言 >java使用阿里云oss上传文件测试案例+上传策略包装类

java使用阿里云oss上传文件测试案例+上传策略包装类

时间:2023-05-21 23:33:01浏览次数:76  
标签:java String com oss private aliyun 上传 public


产品文档地址:
https://help.aliyun.com/product/31815.html 产品购买地址:
https://www.aliyun.com/search?scene=all&k=oss
在官网首先购买产品,开通oss服务后进入控制台:
java使用阿里云oss上传文件测试案例+上传策略包装类_上传
在https://developer.aliyun.com/ask/2061
查看相关的endpoint地址(找到自己所在的区域)

在控制台
https://oss.console.aliyun.com/overview 查找accesskey入口:
java使用阿里云oss上传文件测试案例+上传策略包装类_上传_02
获得自己的accessKeyId和accessKeySecret
在控制台点击新建bucket,自己定义名字

进入自己项目导入依赖:

<dependency>
        <groupId >com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>2.8.2</version>
        </dependency>
        <dependency>
        <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>1.1.0</version>
        </dependency>

新建一个单元测试:

private String endpoint ="https://oss-cn-beijing.aliyuncs.com";//(写自己endpoint对应的地址)
    private String accessKeyId="...";
    private String secretAccessKey="...";
    private String bucketName="...";
    @Test
    public void uploadByOss() throws FileNotFoundException {
        OSSClient ossClient = new OSSClient(endpoint,accessKeyId, secretAccessKey);
        InputStream inputStream = new FileInputStream("C:\\Users\\14172\\Pictures\\0.png");
//上传图片,第一个参数为bucketName,第二个参数key为上传的文件路径名称,第三个为InputStream
        ossClient.putObject(bucketName ,"upload/" +"aa.jpg", inputStream);
        Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
// 生成URL,第一个参数为bucketName,第二个参数key为上传的文件路径名称,第三个为过期时间
        URL url = ossClient.generatePresignedUrl(bucketName ,"upload/"+"aa.jpg" , expiration);
        System.out.println(url);

    }

点击运行后可以看到文件管理中多了一个文件夹,下面有自己上传的文件:

java使用阿里云oss上传文件测试案例+上传策略包装类_单元测试_03


在程序运行后得到的url点击后会跳转到网页自动下载:

java使用阿里云oss上传文件测试案例+上传策略包装类_上传_04


java使用阿里云oss上传文件测试案例+上传策略包装类_单元测试_05


点击后可以看到自己刚刚上传的文件

也可以用一个类将oss上传包装起来:

@Service
public class OssUploadStrategyImpl extends AbstractUploadStrategyImpl {
    @Autowired
    private OssConfigProperties ossConfigProperties;

    @Override
    public Boolean exists(String filePath) {
        return getOssClient().doesObjectExist(ossConfigProperties.getBucketName(), filePath);
    }

    @Override
    public void upload(String path, String fileName, InputStream inputStream) {
        getOssClient().putObject(ossConfigProperties.getBucketName(), path + fileName, inputStream);
    }

    @Override
    public String getFileAccessUrl(String filePath) {
        return ossConfigProperties.getUrl() + filePath;
    }

    /**
     * 获取ossClient
     *
     * @return {@link OSS} ossClient
     */
    private OSS getOssClient() {
        return new OSSClientBuilder().build(ossConfigProperties.getEndpoint(), ossConfigProperties.getAccessKeyId(), ossConfigProperties.getAccessKeySecret());
    }

}

在yml文件中写oss配置:

upload:
  mode: oss
  oss:
    url: https://OSS域名/
    endpoint: oss-cn-beijing-.aliyuncs.com
    accessKeyId: ..
    accessKeySecret: ..
    bucketName: ..

获得配置文件的值:

@Data
@Configuration
@ConfigurationProperties(prefix = "upload.oss")
public class OssConfigProperties {

    /**
     * oss域名
     */
    private String url;
    private String endpoint;

    /**
     * 访问密钥id
     */
    private String accessKeyId;

    /**
     * 访问密钥密码
     */
    private String accessKeySecret;
    private String bucketName;

}

上传策略抽象类:

@Service
public abstract class AbstractUploadStrategyImpl {

    @Override
    public String uploadFile(MultipartFile file, String path) {
        try {
            // 获取文件md5值
            String md5 = FileUtils.getMd5(file.getInputStream());
            // 获取文件扩展名
            String extName = FileUtils.getExtName(file.getOriginalFilename());
            // 重新生成文件名
            String fileName = md5 + extName;
            // 判断文件是否已经上传
            if (!exists(path + fileName)) {
                upload(path, fileName, file.getInputStream());
            }
            return getFileAccessUrl(path + fileName);
        } catch (Exception e) {
            e.printStackTrace();
            throw new BizException("文件上传失败");
        }
    }
      public abstract Boolean exists(String filePath);
}


标签:java,String,com,oss,private,aliyun,上传,public
From: https://blog.51cto.com/u_15980129/6320685

相关文章

  • 学习笔记-Java8新特性-第四节-StreamAPI
    StreamAPI利用StreamAPI可以像流水线一样操作处理数据源(数组、集合……)Stream自己不会存储元素Stream不会改变数据源,而是会返回一个持有处理结构的新StreamSteam操作时延迟执行的,他们会等到需要结果的时候才执行称为惰性求值Stream操作的三个步骤创建Stream......
  • java学习日记20230521-HashTable
    存放的键值对k-v键和值都不能为空,否则会抛出NullPointException使用方法和HashMap一致线程安全,HashMap线程不安全继承的dictionary实现了Map接口底层是一个entry数组,初始化大小为11,临界值为8,第一次扩容为23,按照自己的扩容机制,2N+1 ......
  • Java的GUI窗体出现中文不能正确显示解决方法
    问题描述:用java做一个图形化界面的程序,在Eclipse上运行后中文显示方框,如下图所示:解决方法:在要运行的代码上右键RunAs-->RunConfigurations...在Arguments-->VMarguments:中增加下面这句:-Dfile.encoding=gbk点击Apply,然后运行  成功显示中文......
  • 学习笔记-Java8新特性-第五节-Optional类
    Optional类Optional<T>是一个容器类代表一个值存在或不存在致力于解决空指针异常问题(NPE)可以快速锁定发生NPE的位置(这东西真的好用吗?)常用方法Optional.of(Tt)创建一个Optional实例不能传入空指针,会报NPE使用Optional,报空指针了,说明就是这里的问题?......
  • 学习笔记-Java8新特性-第六节-接口中的默认方法与静态方法
    接口中的默认方法与静态方法默认方法在接口中可以使用default修饰方法,为方法提供默认实现publicinterfaceMyInterface{defaultvoidgetName(){System.out.println("DEFAULT");}}一般情况下,继承了接口的子类,可以不提供接口的实现类优先......
  • 学习笔记-Java8新特性-第七节-新时间与日期API
    新时间与日期API本地时间类LocalDateLocalTImeLocalDateTime简介人读的时间提供以ISO-8601为标准的日期和时间提供简单的日期或时间并不包含当前的时间信息也不包含与时区相关的信息示例publicvoidtest1(){LocalDateTimelocalD......
  • 学习笔记-Java8新特性-第三节-方法引用与构造器引用
    方法引用与构造器引用什么是方法引用对方法的引用若Lambda体中的内容,已经有方法实现了,我们可以使用该方法的方法引用作为替代已经有方法实现了是指,该方法的参数列表和返回值类型和lambda的一致可以将方法引用理解成Lambda表达式的另外一种表现形式语法格式对象......
  • 学习笔记-Java8新特性-第二节-Lambda表达式
    Lambda表达式Lambda表达式是什么Lambda是一个匿名函数是一段可以传递的代码是一种语法糖使用Lambda可以写出更简洁、更灵活的代码如果要使用Lambda表达式,需要函数式接口的支持Lambda的语法格式基础语法Java8中引入了一个新的操作符->称为箭头操作符或La......
  • 深入理解Spring MVC:Java Web 开发的强大框架
    简介:SpringMVC是一个基于Java的开源Web应用框架,它提供了一种基于模型-视图-控制器(Model-View-Controller)设计模式的开发方式。它是Spring框架的一部分,用于构建高度可扩展的Web应用程序。本博客将深入探讨SpringMVC的核心概念和特性,以及如何使用它构建灵活、可维护的......
  • java基于的springboot+vue4S店车辆管理系统,车辆销售管理系统,附源码+数据库+lw文档+PPT
    1、项目介绍首先介绍了4S店车辆管理的技术发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及E-R图。然后,设计框架并根据设计的框架编写代码以实......