总说
过程参考黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili
目录
一、功能实现
这里写的是一个测试文件,没有集成到项目中,想看集成到项目中 看下一个博客
1.1 添加依赖
打开对象存储OSS,选择左边的SDK下载:
然后打开把java文档打开:
往下翻,找到安装SDK,选择maven项目方式,
复制依赖:
来到项目的pom.xml中,添加依赖:
<!-- 阿里云OSS依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>
再复制下面的依赖,因为我用的版本是java 17:
复制到pom.xml中:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
1.2 复制文件
我们要是实现的是上传文件功能,所以选择:
对象/文件——上传文件——简单上传
复制示例代码到项目中:
来到test目录下,创建一个Demo类,代码是上面复制的:
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.ByteArrayInputStream;
public class Demo {
public static void main(String[] args) throws Exception {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "exampledir/exampleobject.txt";
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
String region = "cn-hangzhou";
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 填写字符串。
String content = "Hello OSS,你好世界";
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);
// 上传字符串。
PutObjectResult result = ossClient.putObject(putObjectRequest);
} 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();
}
}
}
}
1.3 参数修改
对代码的参数进行修改。
1.3.1 修改参数endpoint
来到对象存储OSS的Bucket列表,点击我们之前创建的Bucket:
点击 概览,然后复制地址:
赋值给代码中的endpoint的值:
我的服务器就在华东,所以代码没变
// 以华东1(杭州)为例,endpoint:是服务器区域节点
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
1.3.2 修改环境变量
将下一行代码注释掉,我们先直接用两个变量代替,不设置环境变量
然后将我们之前设置的id和secret粘贴进去
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
//EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
String ACCESS_KEY_ID = "LTAI5tRrhg6TFMC9vRnE8PSa";
String ACCESS_KEY_SECRET = "d4vDQAycnaNh1oXl6cLgFwXii2uPIV";
1.3.3 修改Bucket名称
我们将我们之前创建的Bucket名称粘进去:
// 填写Bucket名称
String bucketName = "learn-project-test";
1.3.4 修改ObjectName
修改存储对象的名字,可以是图片、文本等等,这里用001.png(就是你要上传的图片的名字,确保你的图片和这里的命名一致)
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "001.png";
1.3.5 添加变量
由于下载的代码和视频里代码版本不一样,没有办法照着写,我去问了一下Deepseek,对下面的代码进行了修改
在 创建OSSClient实例 上面添加代码:
// 使用 DefaultCredentialProvider 或 StaticCredentialsProvider
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(ACCESS_KEY_ID, ACCESS_KEY_SECRET);
1.3.6 修改OSSClient实例
// 填写字符串。
String content = "Hello OSS,你好世界";
// 创建PutObjectRequest对象
//这里我们要上传图片,修改为:new FileInputStream("本地磁盘路径")
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new FileInputStream("C:\\Users\\86176\\Desktop\\files\\001.png"));
1.3.7 完整代码
package com.example.learnproject;
import com.aliyun.oss.*;
import com.aliyun.oss.common.comm.SignVersion;
import org.junit.jupiter.api.Test;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
public class Demo {
public static void main(String[] args) throws Exception {
// 以华东1(杭州)为例,endpoint:是服务器区域节点
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
//EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
String ACCESS_KEY_ID = "LTAI5tRrhg6TFMC9vRnE8PSa";
String ACCESS_KEY_SECRET = "d4vDQAycnaNh1oXl6cLgFwXii2uPIV";
// 填写Bucket名称
String bucketName = "learn-project-test";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "001.png";
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
String region = "cn-hangzhou";
// 使用 DefaultCredentialProvider 或 StaticCredentialsProvider
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(ACCESS_KEY_ID, ACCESS_KEY_SECRET);
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 填写字符串。
String content = "Hello OSS,你好世界";
// 创建PutObjectRequest对象
//这里我们要上传图片,修改为:new FileInputStream("本地磁盘路径")
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new FileInputStream("C:\\Users\\86176\\Desktop\\files\\001.png"));
// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);
// 上传字符串。
PutObjectResult result = ossClient.putObject(putObjectRequest);
} 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();
}
}
}
}
1.3.8 运行测试
点击运行
运行成功,无报错
再检查一下图片是否上传成功
来到我们的Bucket,点击
看到我们的图片已经成功传进来了