H5W3
当前位置:H5W3 > java > 正文

Aliyun Oss上传文件java实现

目录

  • Aliyun OSSOSS 简介
  • OSS 基本概念
  • OSS 功能概述
  • OSS 使用创建存储空间Bucket
  • 创建子目录
  • Java编码
  • 测试

Aliyun OSS

OSS 简介

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

OSS 基本概念

官方文档:点我传送

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

OSS 功能概述

官方文档:点我传送

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

OSS 使用

使用步骤:
Aliyun Oss 上传文件

创建存储空间Bucket

官方文档:点我传送

Aliyun Oss 上传文件

创建子目录

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

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
56c
.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("<y
56c
ourBucketName>", "<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
accessKeyS
56c
ecret: #accessKeySecret
bucketName: #bucketName
url: https://<bucketName>.<endpoint>
directoryPath: images/

测试

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

本文地址:H5W3 » Aliyun Oss上传文件java实现

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址