阿里云OSS上传文件详细步骤

阿里云OSS删除文件详细步骤

一、阿里云oss服务开通

点击开通

二、进入控制台

点击进入

三、创建Bucket

点击进入Bucket
阿里云OSS上传文件详细步骤_第1张图片

四、创建AccessKey

阿里云OSS上传文件详细步骤_第2张图片

云账号 AccessKey 是您访问阿里云 API 的密钥,具有账户的完全权限
请您务必妥善保管!
不要以任何方式公开 AccessKey 到外部渠道(例如 Github)
避免被他人利用造成 安全威胁。
强烈建议您遵循 阿里云安全最佳实践
使用 RAM 用户(而不是云账号)的 AccessKey 进行 API 调用。

创建成功后先复制粘贴到一边

五、上代码

1.导入依赖

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

如果使用的是Java 9及以上的版本,则需要添加jaxb一下相关依赖。

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.3</version>
</dependency>

2.配置类application.yml

注意:folder为上传文件基目录,如果不配置,则自动在根目录创建文件夹
# 阿里云OSS
aliyun:
  oss:
    file:
      endpoint: oss-cn-beijing.aliyuncs.com # 对应公网endpoint地址
      accessKeyId: yourAccessKeyId
      accessKeySecret: yourAccessKeySecret
      bucketName: yourbucketName
	  folder: active #保存文件夹路径

3.创建一个读取配置的类

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@PropertySource(value = "classpath:application.yml") //指定配置文件的位置
public class AliConfig implements InitializingBean {
    /**
     * 对应公网endpoint地址
     */
    @Value("${aliyun.oss.file.endpoint}")
    private String endpoint;

    /**
     * AccessKeyId
     */
    @Value("${aliyun.oss.file.accessKeyId}")
    private String accessKeyId;

    /**
     * AccessKeySecret
     */
    @Value("${aliyun.oss.file.accessKeySecret}")
    private String accessKeySecret;

    /**
     * Bucket名称
     */
    @Value("${aliyun.oss.file.bucketName}")
    private String bucketName;
  
    /**
     * 上传文件夹路径
     */
    @Value("${aliyun.oss.file.folder}")
    private String folder;

    public static String END_POINT;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;
    public static String BUCKET_NAME;
    public static String FOLDER;

    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = endpoint;
        ACCESS_KEY_ID = accessKeyId;
        ACCESS_KEY_SECRET = accessKeySecret;
        BUCKET_NAME = bucketName;
        FOLDER = folder;
    }
}

4.业务代码

@RestController
@RequestMapping("/upload")
public class UploadController {

    @PostMapping
    public AjaxResult uploadFile(@RequestParam("file") MultipartFile file) {
        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = AliConfig.END_POINT;
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = AliConfig.ACCESS_KEY_ID;
        String accessKeySecret = AliConfig.ACCESS_KEY_SECRET;
        String bucketName = AliConfig.BUCKET_NAME;
        String folder = AliConfig.FOLDER;
        try {
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
            InputStream inputStream = file.getInputStream();
            //获取文件真实名称
            String originalFilename = file.getOriginalFilename();
            //重命名,防止相同文件出现覆盖 
            //生成的f4f2e1a3-391a-4d5a-9438-0c9f5d27708c 需要替换成 f4f2e1a3391a4d5a94380c9f5d27708c
            String uuid = UUID.randomUUID().toString().replaceAll("-","");
            //新的文件名
            originalFilename = uuid + originalFilename;
            //2、把文件按照日期进行分类
            String datePath = new DateTime().toString("yyyy/MM/dd");
            //拼接
            originalFilename = folder + "/" + datePath + "/" + originalFilename;
            // oss实现上传文件
            ossClient.putObject(bucketName, originalFilename, inputStream);
            // 关闭OSSClient
            ossClient.shutdown();
            
            //把上传之后文件路径返回,手动拼接出来
            String url = "https://" + bucketName + "." + endpoint + "/" + originalFilename;
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

你可能感兴趣的:(Java,springboot,java,阿里云,OSS,对象存储)