Aliyun OSS

OSS 简介

阿里云对象存储OSS(Object Storage Service)是阿里云提供的海量、安全、低成本、高持久的云存储服务。

OSS 基本概念

官方文档:点我传送

  • 存储空间(Bucket)
  • 对象(Object)
  • ObjectKey
  • Region(地域)
  • Endpoint(访问域名)
  • AccessKey(访问密钥)

OSS 功能概述

官方文档:点我传送

  • 创建存储空间
  • 上传文件
    • 简单上传: 包括流式上传和文件上传。最大不能超过5GB。
    • 表单上传: 最大不能超过5GB。
    • 追加上传: 最大不能超过5GB。
    • 断点续传上传: 支持并发、断点续传、自定义分片大小。大文件上传推荐使用断点续传。最大不能超过48.8TB。
    • 分片上传: 当文件较大时,可以使用分片上传,最大不能超过48.8TB。
  • 下载文件

OSS 使用

使用步骤:

创建存储空间Bucket

官方文档:点我传送

创建子目录

创建目录,更好的区分图片存放的位置。也可以直接放在创建的Bucket上。

Java编码

  • controller 层
/**
* 图片上传 Controller
*/
@RestController
@RequestMapping("/images")
public class ImagesController { @PostMapping("/upload")
public void upload(@RequestParam("imageString") String imageString) throws UnsupportedEncodingException {
String list = seafoodService.upload(imageString);
} }
  • Service层

interface Service

/**
* 上传图片 service接口
*/
public interface ISeafoodService { /**
* 图片上传
* @author Hosystem
* @create 2021-2-24
* @desc 图片上传
**/
String upload(String imageString) throws UnsupportedEncodingException;
}

ServiceImpl

/**
* 上传图片 service
*/
@Service
public class SeafoodServiceImpl implements ISeafoodService { /**
* 阿里云 OSS 配置抽取yml
*/
@Autowired
AliPayClientProperties aliPayClientProperties; /**
* 图片上传
* @author HYH
* @create 2021-2-24
* @desc 图片上传 将图片转换成base64编码然后传进来
*
* 参考文档:https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.2.10.e50c46a19Q1Q52
**/
@Override
public String upload(String imageString) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(appProps.getAliOssClientProperties().getEndpoint(), appProps.getAliOssClientProperties().getAccessKeyId(), appProps.getAliOssClientProperties().getAccessKeySecret()); // 创建一个Base64 对象
Base64 base64 = new Base64(); // 将传进来的base64编码 进行解码
byte[] imageByte = base64.decode(imageString.toString()); // 创建字节流 将base64解码后进行字节流转换
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imageByte); // 上传路径 bucket目录名 + 图片的名称 使用UUID随机生成
// OSS管理控制台将所有文件名以正斜线(/)结尾的文件显示为文件夹;
// 如:abc/efg/123.jpg这个路径的文件,在OSS管理控制台上看起来就是123.jgp存放在abc文件夹下的efg子文件夹中。
// 若想上传到bucket 则 String url = UUID.randomUUID().toString() + "." + "jpg";
String url = appProps.getAliOssClientProperties().getDirectoryPath() + UUID.randomUUID().toString() + "." + "jpg"; // 文件元信息(Object Meta):包括HTTP header和自定义元信息
// 创建上传文件的元信息,可以通过文件元信息设置HTTP header。
// 参考文档:https://help.aliyun.com/document_detail/84840.html
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/jpg"); // 上传文件
// 格式:ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta);
ossClient.putObject(appProps.getAliOssClientProperties().getBucketName(), url, byteArrayInputStream, objectMetadata); // 关闭OSSClient
ossClient.shutdown(); // 返回上传图片的OSS路径
return appProps.getAliOssClientProperties().getUrl() + url;
} }
  • yml配置抽取
@Data
@Component
@Accessors(chain = true)
@ConfigurationProperties(prefix = "aliOssClientProperties")
public class AliOssClientProperties { /**
* 阿里云OSS endpoint
*/
private String endpoint; /**
* 阿里云OSS AccessKey
*/
private String accessKeyId; /**
* 阿里云OSS AccessKeySecret
*/
private String accessKeySecret; /**
* 阿里云OSS bucketName
*/
private String bucketName; /**
* 阿里云OSS url
*/
private String url; /**
* 阿里云OSS directoryPath 目录路径
*/
private String directoryPath;
}
  • yml配置
  # http://<bucket>.<endpoint>/<yourfile>+<yourdirectoryPath>
aliOssClientProperties:
endpoint: oss-cn-shenzhen.aliyuncs.com
accessKeyId: #accessKey
accessKeySecret: #accessKeySecret
bucketName: #bucketName
url: https://<bucketName>.<endpoint>
directoryPath: images/

测试

这里我通过swagger进行测试,也可以通过postman进行测试,直接定义常量imageString 当作参数使用。

参考文档1:点我传送

参考文档2:点我传送

参考文档3:点我传送

Aliyun Oss 上传文件的更多相关文章

  1. 关于 tp5.0 阿里云 oss 上传文件操作

    tp5.0 结合阿里云oss 上传文件 1.引入 oss 的空间( composer install 跑下第三方拓展包及核心代码包) 备注:本地测试无误,放到线上有问题  应该是移动后的路劲(相对于服 ...

  2. oss上传文件0字节

    最近使用oss上传文件,不同项目中使用的版本也不同,之前的都能正常上传,最近因需要添加ObjectMetaData属性,扩展了一个方法,发现上传的文件始终是0字节的,最终跟源码发现conntentLe ...

  3. TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片

    **TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片首先我们来看看淘宝的功能和样式:** 之后看看制作完成的演示:(由于全部功能弄成GIF有点大,限制上传大小好像在1M之内,压缩之后也有1.9 ...

  4. CentOS命令行向OSS上传文件或文件夹

    下载地址:https://helpcdn.aliyun.com/document_detail/50452.html?spm=a2c4g.11186623.4.2.KyQak3 百度云盘:https: ...

  5. 阿里云OSS 上传文件SDK

    Aliyun OSS SDK for C# 上传文件 另外:查找的其他实现C#上传文件功能例子: 1.WPF用流的方式上传/显示/下载图片文件(保存在数据库) (文末有案例下载链接) 2.WPF中利用 ...

  6. 使用阿里云OSS上传文件

    本文介绍如何利用Java API操作阿里云OSS对象存储. 1.控制台操作 首先介绍一下阿里云OSS对象存储的一些基本概念. 1.1 进入对象存储界面 登录阿里云账号,进入对象存储界面,如图所示. 进 ...

  7. PHP SDK+Oss 上传文件流

    // Endpoint以杭州为例,其它Region请按实际情况填写. $endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 云 ...

  8. OSS上传文件到阿里云

    最近做项目,需要上传文件,因为上传到项目路径下,感觉有时候也挺不方便的,就试了一下上传文件到阿里云oss上去了, oss的使用网上有很多介绍,都是去配置一下需要的数据,然后直接调用他的api就可以了. ...

  9. 阿里云OSS上传文件demo

    1.安装ali-oss npm install ali-oss --save 2.demo 此例中使用到了ElementUI的el-upload组件.因为样式为自定义的 所以没有用element的自动 ...

随机推荐

  1. linux开发各种I/O操作简析,以及select、poll、epoll机制的对比

    作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:羽林君 IO 概念区分 四个相关概念: 同步(Synchronous) 异步( Asynchronous) 阻塞( Blocking ) 非阻塞( ...

  2. 【算法】数据结构与算法基础总览(中)——刷Leetcode等算法题时一些很实用的jdk辅助方法锦集

    最近重新学习数据结构与算法以及刷leetcode算法题时,发现不少jdk自带的方法可以提升刷题的效率.这些小技巧不仅仅对刷算法题带来便利,对我们平时开发也是很有帮助的.本文以java语言为基础,记录了 ...

  3. 2019牛客暑期多校训练营(第九场)B Quadratic equation (平方剩余)

    \((x+y)\equiv b\pmod p\) \((x\times y)\equiv c\pmod p\) 由第一个式子可知:\(x+y=b~or~x+y=b+p\) 先任选一个代入到第二个式子里 ...

  4. Codeforces Round #665 (Div. 2)

     Codeforces Round #665 (Div. 2)  A. Distance and Axis 如果\(B\)在\(O\)左边,那么只能是定值\(OA\) 如果\(B\)在\(OA\)中间 ...

  5. 【noi 2.6_6252】带通配符的字符串匹配(DP)

    题意:给出一个带有通配符("?"可以代替一个字符,"*"可以代替零个或多个字符)的a字符串和一个不带通配符的b字符串,判断他们是否能够匹配. 解法:f[i][j ...

  6. A - Promotions

    题目详见http://7xjob4.com1.z0.glb.clouddn.com/3f644de6844d64706eb36baa3a0c27b0 这题是普通的拓扑排序,要把每一层的都保存下来. # ...

  7. Codeforces Round #570 (Div. 3) E. Subsequences (easy version) (搜索,STL)

    题意:有一长度为\(n\)的字符串,要求得到\(k\)不同的它的子序列(可以是空串),每个子序列有\(|n|-|t|\)的贡献,求合法情况下的最小贡献. 题解:直接撸个爆搜找出所有子序列然后放到set ...

  8. 郁闷的出纳员 HYSBZ - 1503

    OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的 工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资.如果他 ...

  9. 交换机上禁止某个MAC地址通信

    当分析出网络中某台机器中毒时而有不知道它的具体位置,我们可以通过获取其MAC地址然后在交换机上禁止其MAC来达到隔离它的效果.通过ARP表查询IP地址对应的MAC地址,再将该MAC地址加入黑名单过滤. ...

  10. C++ 结构体 segment fault

    形如 struct node { int key; int height; int size; //tree node 个数 node *left, *right; node(int x) : key ...