Springboot上传文件到阿里云对象存储OSS的几种常用方法

Posted lovoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot上传文件到阿里云对象存储OSS的几种常用方法相关的知识,希望对你有一定的参考价值。

1、进入阿里云创建OSS

地址:https://oss.console.aliyun.com/bucket
如图选中,其它默认
在这里插入图片描述
创建完成后如图:
在这里插入图片描述
获得 Endpoint(地域节点)
在这里插入图片描述

2、创建用户

创建用户时选择“编程使用”,完成后可获得 key 与 secret
在这里插入图片描述

方法一、原始方法

在项目pom.xml文件中引入

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

创建上传工具类:

import java.io.*;
import java.net.URL;

/**
 * 阿里云对象存储上传
 *
 * @Package com.wys.common.utils
 * @Author charlin
 * @Version: v1.0
 * @Date 2021-06-1715:13
 * @Copyright: 2021 www.wyscha.com Inc. All rights reserved.
 */
public class OssUploadUtil {

    /**
     * 流式上传
     */
    public static void uploadByStream() {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "yourEndpoint";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";

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

        // 填写字符串。
        String content = "Hello OSS";

        // 创建PutObjectRequest对象。
        // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
        PutObjectRequest putObjectRequest = new PutObjectRequest("examplebucket", "exampleobject.txt", new ByteArrayInputStream(content.getBytes()));

        // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
        // ObjectMetadata metadata = new ObjectMetadata();
        // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
        // metadata.setObjectAcl(CannedAccessControlList.Private);
        // putObjectRequest.setMetadata(metadata);

        // 上传字符串。
        ossClient.putObject(putObjectRequest);

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

    /**
     * 字节上传
     */
    public static void uploadByByte() {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "yourEndpoint";
        // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);
        // 填写Byte数组。
        byte[] content = "Hello OSS".getBytes();
        // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
        ossClient.putObject("examplebucket", "exampleobject.txt", new ByteArrayInputStream(content));
        // 关闭OSSClient。
        ossClient.shutdown();
    }


    /**
     * 上传网络流
     */
    public static void uploadByNetStream() {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "yourEndpoint";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 填写网络流地址。
        InputStream inputStream = null;
        try {
            inputStream = new URL("https://www.aliyun.com/").openStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
        ossClient.putObject("examplebucket", "exampleobject.txt", inputStream);
        // 关闭OSSClient。
        ossClient.shutdown();
    }

    /**
     * 上传文件流
     */
    public static void uploadByFileStream() {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI5tJdbfYNXqfDG3tu6ioJH2";
        String accessKeySecret = "lAraWT3r8EF43RUBcIj7q8NFWWQhz9n";

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

        // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream("C:\\\\Users\\\\Administrator\\\\Desktop\\\\图片\\\\ia_100000003.png");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
        ossClient.putObject("wysmall", "ia_100000003.png", inputStream);
        // 关闭OSSClient。
        ossClient.shutdown();

        System.out.println("上传成功!");
    }

    public static void main(String[] args) {
        uploadByFileStream();
    }
}

方法二:使用cloud模式

api地址:https://github.com/alibaba/aliyun-spring-boot/tree/master/aliyun-spring-boot-samples/aliyun-oss-spring-boot-sample

在项目pom.xml中引入:

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>aliyun-oss-spring-boot-starter</artifactId>
        </dependency>
  <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>aliyun-spring-boot-dependencies</artifactId>
                <version>1.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

配置文件application.yml

alibaba:
  cloud:
    access-key: LTAI5tJbfYNXqf11G33tu6ioJH2
    secret-key: lAraWT3r8E43RUBcI2j7q83NFWWQhz9n
    oss:
      endpoint: oss-cn-beijing.aliyuncs.com

文件上传:

@RunWith(SpringRunner.class)
@SpringBootTest
class MallServiceApplicationTests {

    @Autowired
    private OSSClient ossClient;

    @Test
    void contextLoads() {

    }

    @Test
    public void uploadFile() {
        //ossClient.getObject(new GetObjectRequest("wysmall", "11.jpg"), new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\图片\\\\11.jpg"));
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream("C:\\\\Users\\\\Administrator\\\\Desktop\\\\图片\\\\11.jpg");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        PutObjectResult result = ossClient.putObject("wysmall", "11.jpg", fileInputStream);
        ossClient.shutdown();
        System.out.printf("上传成功");
    }

}

方法三、使用中转服务器

在这里插入图片描述

以上是关于Springboot上传文件到阿里云对象存储OSS的几种常用方法的主要内容,如果未能解决你的问题,请参考以下文章

上传文件到阿里云OSS对象存储,查询访问地址,删除文件

基于Vue和ElementUI上传文件到阿里云OSS对象存储中

使用阿里云OSS上传文件

SpringBoot整合阿里云OSS

使用阿里云OSS上传文件

springboot 集成阿里云oss