一、阿里云OSS注册与使用

1.登录阿里云官网

阿里官网链接

  • 通过点击右上角的登录注册按钮进行下一步
  • 2.登录注册

    进行注册登录后会有个人身份验证操作,可以通过支付宝账号快速实名

    3.搜索"对象存储 OSS"或者"OSS"

    4.点击立即购买

    注意:首次使用会有3个月的免费试用,内存20g

    5.按需购买存储空间

    6.购买完成回到上一个页面点击管理控制台或者直接进入管理控制台

    7. 点击"Bucket列表"进入页面

    8.创建Bucket

    以下容器选择按需就行,注意:读写权限选择私有就无法公共访问,访问时需要加上身份后缀,可能导致身份信息泄露

    9.创建完成后点击进入bucket

    10.当点入的时候就可以看到内存中的文件

    这里默认就是空文件夹

    二、使用阿里云OSS

    对于使用方法可以直接观看官方文档
    阿里云OSS对象存储官方文档链接

    直接开发参考(这里使用的是Java为例)

    如果需要其他语言的教程,可以以此为例进行使用。

    1.安装SDK


    这里官方使用的是
    在Maven工程中使用OSS Java SDK,只需在pom.xml中加入相应依赖即可。在中加入如下内容:

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

    如果使用的是Java 9及以上的版本,则需要添加JAXB相关依赖。添加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.如果按照官方的文档步骤来这里需要先配置环境变量

    但是我为了方便就不配置环境了,直接去使用

    3.快速入门

    我的代码对一些非固定的属性写在了application.yml文件中了,方便后期云端口变了好更改

  • application.yml配置文件中的代码
  • aliyun:
      OSS:
        endpoint: Endpoint的服务端点(例子:https://oss-cn-beijing.aliyuncs.com)
        accessKeyId: 访问凭证
        accessKeySecret: 访问凭证的密钥
        objectName : 存储空间内的文件地址
        bucketName : 就是bucket的名称
    

    例子:

    aliyun:
      OSS:
        endpoint: https://oss-cn-beijing.aliyuncs.com
        accessKeyId: LTAI***********iehvy4
        accessKeySecret: Jm8A*************lAE
        objectName : exampledir/
        bucketName : chen-buck
    
  • endpoint获取
  • accessKeyId和accessKeySecret获取
  • 第二部点击进去创建AccessKey

  • bucketName就是一开始创建的名
  • 3.1 上传代码

    package com.wedu.modules.fileCunChu;
    
    
    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.PutObjectRequest;
    import com.aliyun.oss.model.PutObjectResult;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import org.springframework.web.multipart.MultipartFile;
    
    @Component
    public class AliOssStorage {
    
       // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        @Value("${aliyun.OSS.endpoint}")
        private String endpoint;
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        @Value("${aliyun.OSS.accessKeyId}")
        private String accessKeyId;
        @Value("${aliyun.OSS.accessKeySecret}")
        private String accessKeySecret;
        @Value("${aliyun.OSS.objectName}")
        private String objectName;
         // 填写Bucket名称,例如examplebucket。
        @Value("${aliyun.OSS.bucketName}")
        private String bucketName ;
    
         /**
         * @param file 前端传入所接收的文件
         * @param name 起的文件名称
         * @return
         * @throws Exception
         */
        @Override
        public String FileStorage(MultipartFile file, String name) throws Exception {
            // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
            String objectName1=objectName+name;
             // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);
            try {
                //创建Put0bjectRequest对象。
                PutObjectRequest putObjectRequest=new PutObjectRequest(bucketName,objectName1,file.getInputStream());
                //设置该属性可以返回response。如果不设置,则返回的response为空。
                putObjectRequest.setProcess("true");
                //创建PutObject请求。
                PutObjectResult result=ossClient.putObject(putObjectRequest);
                //如果上传成功,则返回200。
                System.out.println(result.getResponse().getStatusCode());
    
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
    
            //返回Url
            //这里的url就是文件存储到云端的地址它是由
            //          https:                 //   bucket名称  .   服务端口                /   文件地址/文件名
            //https://chen-buck.oss-cn-beijing.aliyuncs.com/exampledir/a21a1f5e-c218-4991-adf9-374af000b268.jpg
            String url=endpoint.split("//")[0]+"//"+bucketName+"."+endpoint.split("//")[1]+"/"+objectName1;
            return url;
        }
    }
    
    

    controller层的代码

    package com.wedu.modules.excleUpOrDo;
    
    import com.alibaba.excel.EasyExcel;
    import com.wedu.common.utils.R;
    import com.wedu.modules.fileCunChu.AliOssStorage;
    import com.wedu.modules.sys.controller.AbstractController;
    import com.wedu.modules.sys.service.PromptInformationService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.List;
    import java.util.UUID;
    
    @RestController
    @RequestMapping("/excle")
    public class ExcleUpOrDoController extends AbstractController {
    //注入阿里云工具类(上面所写的类)
        @Autowired
        AliOssStorage donPath;
        //文件导入
        @PostMapping("/uplode")
        public R uplodeExcle(@RequestPart("file")MultipartFile file) throws Exception {
            //获取文件名
            String filename=file.getOriginalFilename();
            //获取文件扩展名
            String[] strings=filename.split("\\.");
            String KzName=strings[strings.length-1];
    
    //通过UUID取文件名(也可以通过  时间+文件名+后缀的方式取名)
            UUID randomString= UUID.randomUUID();
    
            //拼接名称
            String name =randomString+"."+KzName;
            //本地上传
            String s = donPath.FileStorage(file, name);
    
            return R.ok().put("url",s);
        }
    }
    

    测试

    我这里通过接口上传了一张图片,接口成功接受并返回图片地址

    可以通过该地址直接下载图片

    作者:aaa11cyc

    物联沃分享整理
    物联沃-IOTWORD物联网 » 阿里云OSS注册与使用

    发表回复