# oss 对象存储基本使用
进入到阿里云的官网网站:https://www.aliyun.com/
鼠标停留到 产品 处 ,再停留到 存储 处,点击对象存储
此时就会跳转到开通的页面,点击开通
点击 立即开通
开通成功后点击 管理控制台 进入控制台页面
进入如下页面说明开通成功
首先要使用我们需要先了解一些专业术语
下面创建一个 bucket,其中选择低频访问,因为只是测试项目,选择公共读因为私有的我们每次上传都需要携带账号和密码。最后点击 完成创建
创建完成后我们点击进入这个 bucket 进行上传文件,点击扫描文件选择好要上传的文件后点击上传文件
# java 使用 oss 如下:
# 导入依赖:
<dependency> | |
<groupId>com.aliyun.oss</groupId> | |
<artifactId>aliyun-sdk-oss</artifactId> | |
<version>3.15.1</version> | |
</dependency> |
# 文件上传
引用上传文件的代码案例:
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.File; | |
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"; | |
// 填写本地文件的完整路径,例如 D:\\localpath\\examplefile.txt。 | |
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。 | |
String filePath= "D:\\localpath\\examplefile.txt"; | |
// 创建 OSSClient 实例。 | |
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); | |
try { | |
// 创建 PutObjectRequest 对象。 | |
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath)); | |
// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。 | |
// 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(); | |
} | |
} | |
} | |
} |
首先我们需要知道自己的 endpoint,在对象存储页面的访问端口中可以看到
将如下代码修改:
// Endpoint 以华东 1(杭州)为例,其它 Region 请按实际情况填写。 | |
String endpoint = "oss-cn-beijing.aliyuncs.com"; |
下面我们需要去查看自己的 AccessKey 的 Id 和 secret
如果我们直接将 Id 和 secret 配置到代码中会很危险,所以阿里云建议我们在操作对象存储的时候专门对它有一个子账户,我们填写这个子账户的账号密码。子账户我们需要进行开通。如下是开通步骤:
点击 使用子用户的 AccessKey,第一次可能需要开通 RAM 直接开通就行了
点击创建用户
我们没目前只需要在代码里面进行使用我们只需要勾选上 OpenAPI 调用访问即可,点击确定并接受验证码进行确定
子用户创建完成后就可以进行复制 AccessKey Id 和 AccessKey Secret 了
我们在使用之前需要先对该子用户添加权限
新版本我们需要将 AccessKeyID 和 Secret 配置到环境变量中
# 配置 AccessKeyID 和 Secret 到环境中
如果配置了还是报错:
com.aliyun.oss.common.auth.InvalidCredentialsException: Access key id should not be null or empty.
# 解决方式:
- 查看 idea 中使用的 jdk 与环境变量的 jdk 是否一致,不一致修改 jdk 环境变量一致然后重启电脑
- 重启电脑
# 测试 AccessKeyID 和 Secret 的配置情况:
@Test | |
public void testC() throws com.aliyuncs.exceptions.ClientException | |
{ | |
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); | |
Credentials credentials = credentialsProvider.getCredentials(); | |
System.out.println("AccessKeyID: " + credentials.getAccessKeyId()); | |
System.out.println("AccessKeySecret: " + credentials.getSecretAccessKey()); | |
} |
打印结果:
AccessKeyID: LTAI5tGzZmmC8jxxxxDbEMD
AccessKeySecret: 7jF2aIfwORf1xxxxxqxx47j5sVb
测试成功,接下来测试上传文件的代码:
@Test | |
public void testUpload() throws com.aliyuncs.exceptions.ClientException | |
{ | |
// Endpoint 以华东 1(杭州)为例,其它 Region 请按实际情况填写。 | |
String endpoint = "oss-cn-beijing.aliyuncs.com"; | |
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量 OSS_ACCESS_KEY_ID 和 OSS_ACCESS_KEY_SECRET。 | |
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); | |
// 填写 Bucket 名称,例如 examplebucket。 | |
String bucketName = "gulimall-dkx"; | |
// 填写 Object 完整路径,完整路径中不能包含 Bucket 名称,例如 exampledir/exampleobject.txt。 | |
String objectName = "gulimall-dkx/test.jpg"; | |
// 填写本地文件的完整路径,例如 D:\\localpath\\examplefile.txt。 | |
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。 | |
String filePath = "C:\\Users\\Administrator\\Pictures\\Camera Roll\\乡村之夜 房子 田野和稻田 黄昏 乡村小路 河流 风景 4k壁纸_彼岸图网.jpg"; | |
// 创建 OSSClient 实例。 | |
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); | |
try | |
{ | |
// 创建 PutObjectRequest 对象。 | |
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath)); | |
// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。 | |
// 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); | |
System.out.println("result RequestId: " + result.getRequestId()); | |
System.out.println("result ETag: " + result.getETag()); | |
System.out.println("result VersionId: " + result.getVersionId()); | |
System.out.println("result Response: " + result.getResponse()); | |
System.out.println("result ClientCRC: " + result.getClientCRC()); | |
System.out.println("result ServerCRC: " + result.getServerCRC()); | |
} 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(); | |
} | |
} | |
} |
运行结果:
result RequestId: 665DD89377F3A93337E3FA45
result ETag: 508EA42B110937E48E9A6856948422E4
result VersionId: null
result Response: null
result ClientCRC: 6237137517066352504
result ServerCRC: 6237137517066352504
查看 oss 的存储内容
上传成功
# 更简单的方式 SpringCloudAlibaba
# SpringCloudAlibaba 简介
SpringCloudAlibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必须组件,方便开发者通过 SpringCloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 SpringCloudAlibaba,您只需要添加一些注解和少量配置,就可以将 SpringCloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
https://github.com/alibaba/spring-cloud-alibaba