Springboot上传文件到阿里云对象存储OSS的几种常用方法
Posted lovoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot上传文件到阿里云对象存储OSS的几种常用方法相关的知识,希望对你有一定的参考价值。
1、进入阿里云创建OSS
地址:https://oss.console.aliyun.com/bucket
如图选中,其它默认
创建完成后如图:
获得 Endpoint(地域节点)
2、创建用户
创建用户时选择“编程使用”,完成后可获得 key 与 secret
方法一、原始方法
在项目pom.xml文件中引入
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
创建上传工具类:
import java.io.*;
import java.net.URL;
/**
* 阿里云对象存储上传
*
* @Package com.wys.common.utils
* @Author charlin
* @Version: v1.0
* @Date 2021-06-1715:13
* @Copyright: 2021 www.wyscha.com Inc. All rights reserved.
*/
public class OssUploadUtil {
/**
* 流式上传
*/
public static void uploadByStream() {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 填写字符串。
String content = "Hello OSS";
// 创建PutObjectRequest对象。
// 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
PutObjectRequest putObjectRequest = new PutObjectRequest("examplebucket", "exampleobject.txt", 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();
}
/**
* 字节上传
*/
public static void uploadByByte() {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);
// 填写Byte数组。
byte[] content = "Hello OSS".getBytes();
// 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
ossClient.putObject("examplebucket", "exampleobject.txt", new ByteArrayInputStream(content));
// 关闭OSSClient。
ossClient.shutdown();
}
/**
* 上传网络流
*/
public static void uploadByNetStream() {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 填写网络流地址。
InputStream inputStream = null;
try {
inputStream = new URL("https://www.aliyun.com/").openStream();
} catch (IOException e) {
e.printStackTrace();
}
// 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
ossClient.putObject("examplebucket", "exampleobject.txt", inputStream);
// 关闭OSSClient。
ossClient.shutdown();
}
/**
* 上传文件流
*/
public static void uploadByFileStream() {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "oss-cn-beijing.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "LTAI5tJdbfYNXqfDG3tu6ioJH2";
String accessKeySecret = "lAraWT3r8EF43RUBcIj7q8NFWWQhz9n";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
InputStream inputStream = null;
try {
inputStream = new FileInputStream("C:\\\\Users\\\\Administrator\\\\Desktop\\\\图片\\\\ia_100000003.png");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 填写Bucket名称和Object完整路径。Object完整路径中不能包含Bucket名称。
ossClient.putObject("wysmall", "ia_100000003.png", inputStream);
// 关闭OSSClient。
ossClient.shutdown();
System.out.println("上传成功!");
}
public static void main(String[] args) {
uploadByFileStream();
}
}
方法二:使用cloud模式
api地址:https://github.com/alibaba/aliyun-spring-boot/tree/master/aliyun-spring-boot-samples/aliyun-oss-spring-boot-sample
在项目pom.xml中引入:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-oss-spring-boot-starter</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>aliyun-spring-boot-dependencies</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
配置文件application.yml
alibaba:
cloud:
access-key: LTAI5tJbfYNXqf11G33tu6ioJH2
secret-key: lAraWT3r8E43RUBcI2j7q83NFWWQhz9n
oss:
endpoint: oss-cn-beijing.aliyuncs.com
文件上传:
@RunWith(SpringRunner.class)
@SpringBootTest
class MallServiceApplicationTests {
@Autowired
private OSSClient ossClient;
@Test
void contextLoads() {
}
@Test
public void uploadFile() {
//ossClient.getObject(new GetObjectRequest("wysmall", "11.jpg"), new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\图片\\\\11.jpg"));
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream("C:\\\\Users\\\\Administrator\\\\Desktop\\\\图片\\\\11.jpg");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
PutObjectResult result = ossClient.putObject("wysmall", "11.jpg", fileInputStream);
ossClient.shutdown();
System.out.printf("上传成功");
}
}
方法三、使用中转服务器
以上是关于Springboot上传文件到阿里云对象存储OSS的几种常用方法的主要内容,如果未能解决你的问题,请参考以下文章