阿里云—对象存储OSS的基本使用

目录

阿里云:

阿里云OSS:

介绍:

作用:

打开对象存储OSS管理界面:

什么是Bucket:

创建Bucket:

上传文件测试:

发现问题:

Bucket开启公共访问:

再次上传文件测试:

创建AccessKey:

Java项目集成OSS:

打开Java集成OSS文档:

Maven项目中加入依赖:

文件上传示例代码:

封装文件上传OSSUtil工具类:

定义Controller:

调整项目上传文件大小限制:

Postman上传图片文件测试:


阿里云:

        阿里云是阿里巴巴集团旗下全球领先的云计算公司,也是国内最大的云服务提供商。

阿里云OSS:

介绍:

        阿里云对象存储OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。

        阿里云OSS将数据文件以对象(object)的形式上传到存储空间(bucket)中

作用:

  • 创建一个或者多个存储空间,向每个存储空间中添加一个或多个文件。

  • 通过获取已上传文件的地址进行文件的分享和下载。

  • 通过修改存储空间或文件的属性或元信息来设置相应的访问权限。

  • 在阿里云管理控制台执行基本和高级OSS任务。

  • 使用阿里云开发工具包或直接在应用程序中进行RESTful API调用执行基本和高级OSS任务

打开对象存储OSS管理界面:

控制台搜索oss对象存储,展开对象存储OSS菜单。

什么是Bucket:

        Bucket存储空间是用户用于存储对象(Object文件)的容器,所有的对象都必须隶属于某个存储空间。

创建Bucket:

上传文件测试:

基于刚刚成功创建的bucket进行上传文件测试。

发现问题:

        在刚刚上传的文件详情中我们看到该文件的URL后缀带有Expires和OSSAccessKeyId等参数,我们在日常通过网络访问云上的图片文件时,URL后缀是不带这些参数的,如何去掉这些参数呢,我们需要bucket关闭阻止公共访问并且Bucket ACL开启公共读。

Bucket开启公共访问:

再次上传文件测试:

文件URL已恢复正常可以通过外网正常访问下载。

创建AccessKey:

        云账号AccessKey是访问阿里云API的密钥,具有账户的完全权限

Java项目集成OSS:

打开Java集成OSS文档:

打开OSS管理界面任务栏最后一个SDK下载

查看Java集成OSS文档:

Maven项目中加入依赖:

文件上传示例代码:

封装文件上传OSSUtil工具类:

package com.example.springbootquickstart.utils;


import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.FileInputStream;
import java.io.InputStream;

public class AliOSSUtil {

    // bucket概述:访问端口-外网访问-Endpoint(地域节点)
    private static final String ENDPOINT = "https://oss-cn-qingdao.aliyuncs.com";

    // 密钥
    private static final String ACCESS_KEY_ID = "LTAI5t6b2ZF3TSo2C5w89VyC";
    private static final String ACCESS_KEY_SECRET = "rfp72IRXg4kEBfANEk2NastgAcItzi";

    // bucket概述:存储空间名称
    private static final String BUCKET_NAME = "bucket-yangyang-one";

    // objectName: 图片名称(包含后缀),  in: 输入流
    public static String uploadFile(String objectName, InputStream in) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(ENDPOINT,ACCESS_KEY_ID,ACCESS_KEY_SECRET);
        // 返回OSS图片地址
        String url = "";
        try {
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, objectName, in);
            // 创建PutObject请求。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            // 文件上传成功后外网访问地址。 示例: https://bucket-yangyang-one.oss-cn-qingdao.aliyuncs.com/1.png
            url = "https://" + BUCKET_NAME + "." + ENDPOINT.substring(ENDPOINT.lastIndexOf("/")+1) + "/" + objectName;
        } 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();
            }
        }
        return url;
    }
}

定义Controller:

        定义Controller映射文件上传请求,UUID生成文件名,调用OSSUtil工具类上传文件。

package com.example.springbootquickstart.controller;

import com.example.springbootquickstart.dto.ResultDTO;
import com.example.springbootquickstart.utils.AliOSSUtil;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.UUID;

@RestController
@RequestMapping(value = "/file")
public class FileUploadController {

    @RequestMapping(method = RequestMethod.POST, value = "/upload")
    public ResultDTO upload(MultipartFile file) throws IOException {
        String originalFilename = file.getOriginalFilename();
        String originalFileType = originalFilename.substring(originalFilename.lastIndexOf("."));
        String filename = UUID.randomUUID().toString()+originalFileType;
        String url = AliOSSUtil.uploadFile(filename, file.getInputStream());
        return ResultDTO.success(url);
    }
}

调整项目上传文件大小限制:

max-file-size:单个文件大小。max-request-size:总上传的数据大小。

Postman上传图片文件测试:

### 阿里云OSS使用教程 #### 创建阿里云账号并获取AccessKey 为了访问阿里云OSS服务,需要先拥有一个阿里云账号[^2]。如果尚未有账号,则需前往阿里云官方网站完成注册流程。 在成功登录之后,在个人中心页面配置AccessKey,这一步骤至关重要因为后续所有的API调用都需要依赖于`accessKeyId`和`accessKeySecret`来进行身份验证[^3]。 #### 初始化客户端与创建Bucket 一旦获得了必要的认证信息,就可以通过SDK初始化OSSClient实例来操作对象存储资源了。下面是一个简单的Python代码示例展示如何连接到OSS以及创建一个新的bucket: ```python from oss2 import Auth, Bucket auth = Auth('your-access-key-id', 'your-access-key-secret') bucket_name = "example-bucket" region_endpoint = "http://oss-cn-hangzhou.aliyuncs.com" bucket = Bucket(auth, region_endpoint, bucket_name) if not bucket.bucket_exist(): result = bucket.create_bucket() print(f'Create bucket {bucket_name} successfully.') else: print(f'The bucket {bucket_name} already exists.') ``` 此段脚本会尝试创建名为`example-bucket`的空间;如果该空间不存在的话就会被新建出来[^1]。 #### 文件上传至OSS 对于想要将本地文件上传到指定的bucket内的情况,可以利用put_object_from_file方法轻松实现这一目标。这里给出一段用于执行单个文件上载过程的例子: ```python local_file_path = "/path/to/your/file.txt" object_key = "file_uploaded_to_oss.txt" with open(local_file_path, 'rb') as fileobj: result = bucket.put_object(object_key, fileobj) print(f'File uploaded with HTTP status code: {result.status}') ``` 上述代码片段展示了怎样打开一个本地路径下的文件,并将其内容作为二进制流发送给OSS服务器保存为新的Object。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值