OSSClient 已过时,最新版的OSS SDK 插件进行文件上传

文章目录

  • OSSClient 已过时,最新版的OSS SDK 插件进行文件上传
        • 1、上传形式
        • 2、上传字符串
        • 3、上传Byte数组
        • 4、上传网络流
        • 5、上传文件流
        • 6、上传本地文件
        • 7、组件封装

OSSClient 已过时,最新版的OSS SDK 插件进行文件上传


1、上传形式

  • 流式上传
    • 上传字符串
    • 上传Byte 数组
    • 上传网络流
    • 上传文件流
  • 文件上传

2、上传字符串

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "";
String accessKeySecret = "";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 创建PutObjectRequest对象。
String content = "Hello OSS";
// 表示上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
PutObjectRequest putObjectRequest = new PutObjectRequest("", "", new ByteArrayInputStream(content.getBytes()));

// 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);

// 上传字符串。
ossClient.putObject(putObjectRequest);

// 关闭OSSClient。
ossClient.shutdown();                   

3、上传Byte数组

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "";
String accessKeySecret = "";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);

// 上传Byte数组。
byte[] content = "Hello OSS".getBytes();
ossClient.putObject("", "", new ByteArrayInputStream(content));

// 关闭OSSClient。
ossClient.shutdown();

4、上传网络流

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "";
String accessKeySecret = "";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 上传网络流。
InputStream inputStream = new URL("https://www.aliyun.com/").openStream();
ossClient.putObject("", "", inputStream);

// 关闭OSSClient。
ossClient.shutdown();

5、上传文件流

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
String accessKeyId = "";
String accessKeySecret = "";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 上传文件流。
InputStream inputStream = new FileInputStream("");
ossClient.putObject("", "", inputStream);

// 关闭OSSClient。
ossClient.shutdown();

6、上传本地文件

// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "";
String accessKeySecret = "";

// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest("", "", new File(""));

// 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);

// 上传文件。
ossClient.putObject(putObjectRequest);

// 关闭OSSClient。
ossClient.shutdown();            

7、组件封装

所需的pom 依赖

        <dependency>
            <groupId>com.aliyun.ossgroupId>
            <artifactId>aliyun-sdk-ossartifactId>
            <version>3.6.0version>
        dependency>

1、构建属性类

@Data
@RefreshScope
public class OssProperties {

  @Value("${plugin.oss.end-point}")
  private String endPoint;
  @Value("${plugin.oss.access-key-id}")
  private String accessKeyId;
  @Value("${plugin.oss.access-key-secret}")
  private String accessKeySecret;
  @Value("${plugin.oss.bucket}")
  private String bucket;
  @Value("${plugin.oss.host}")
  private String host;
}

2、构建dir,使用枚举更合适,可以自行修改

/**
 * @author Created by 谭健 on 2019/12/25. 星期三. 10:59.
 * © All Rights Reserved.
 *
 * oss 上传必须使用此类进行路径锁定
 */
public class OssDir {
}

3、上传组件

/**
 * @author Created by 谭健 on 2018/12/3. 星期一. 16:32.
 * © All Rights Reserved.
 * 

* oss 上传组件 */ @Slf4j public class OssComponent { private final OssProperties ossProperties; public OssComponent(OssProperties ossProperties) { this.ossProperties = ossProperties; } /** * 进行文件上传,支持各种形式的流 * * @param inputStream 输入流 * @return 返回上传后的对象url 地址 */ public String simpleUpload(InputStream inputStream, String suffix, String dir) { if (inputStream == null) { log.error("通过OSS 流式上传时,输入流为空"); return ""; } String filename = dir + UUID.randomUUID() + "." + suffix; this.put(filename, inputStream); return resourceUrl(filename); } /** * 上传某个链接地址的内容 */ @SneakyThrows(Exception.class) public String uploadUrl(String url, String suffix, String dir) { return simpleUpload(new URL(url).openStream(), suffix, dir); } /** * 构建请求对象 * * @param filename 文件名 * @param inputStream 流 */ private PutObjectRequest buildRequest(String filename, InputStream inputStream) { return new PutObjectRequest(ossProperties.getBucket(), filename, inputStream); } /** * 构建oss 组件 */ private OSS buildOss() { return new OSSClientBuilder().build( ossProperties.getEndPoint(), ossProperties.getAccessKeyId(), ossProperties.getAccessKeySecret()); } /** * 设置存储类型与访问权限 * * @param request 文件请求 */ private static PutObjectRequest jurisdiction(PutObjectRequest request) { ObjectMetadata metadata = new ObjectMetadata(); metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString()); metadata.setObjectAcl(CannedAccessControlList.PublicRead); request.setMetadata(metadata); return request; } /** * 获取上传到 oss 后文件的链接 */ private String resourceUrl(String filename) { return ossProperties.getHost() + ossProperties.getBucket() + "." + ossProperties.getEndPoint() + "/" + filename; } /** * 把文件传到 oss */ private void put(String filename, InputStream inputStream) { OSS ossClient = this.buildOss(); ossClient.putObject( jurisdiction( this.buildRequest(filename, inputStream) ) ); ossClient.shutdown(); } @PostConstruct public void init() { log.info("oss 组件被加载到项目中"); } }

4、构建启动器

@Import({
  OssComponent.class,
  OssProperties.class
})
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface EnableOss {
}

你可能感兴趣的:(云服务,-,阿里云,Java,相关,第三方)