OSSの基本的な使用法については、前の記事を参照してください。クリックして入力します。ここでは、主にSpringBootがAlibabaCloudOSSを操作してファイルのアップロードを実現する方法を紹介します。
1 ServiceImpl.javaコード、入力するには公式ドキュメントを
これは公式ドキュメントのコードです。ここにテキストのアップロードの実装があります:「HelloOSS」
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
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";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
String objectName = "exampledir/exampleobject.txt";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
String content = "Hello OSS";
ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
} 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();
}
}
}
}
ServiceImplに統合認証方式を追加します
公式ドキュメントを読むと、OSSを操作する各方法には、次のID認証プレフィックスが付いていることがわかります。各方法に次のコンテンツを追加すると、コードが冗長になります。
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
したがって、次のコードセグメントを構成します。特定のコードについては、前。このメソッドは、Beanの初期化後にロードできます。もちろん、単純な非静的コードブロックを使用して実装することもできます。
//首先定义相关的类全局属性
//存放endpoint地址
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
//初始化Bean之后需要进行的操作
@Override
public void afterPropertiesSet() throws Exception {
Endpoint以杭州为例,其它Region请按实际情况填写。
endpoint = ossEntity.getEndpoint();
阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
accessKeyId = ossEntity.getAccessKeyId();
accessKeySecret = ossEntity.getAccessKeySecret();
bucketName = ossEntity.getBucketName();
}
上記の定義で、実際にアップロードメソッドを次のように書くことができます
public String upload(MultipartFile file){
// 填写Object完整路径,例如"avater/test.jpg"。Object完整路径中不能包含Bucket名称。这个路径会在 OSS 后台生成相应的目录和文件
String objectName = "avater/test.jpg";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
//String content = "Hello OSS";
try{
ossClient.putObject(bucketName, objectName, file.getInputStream());
}catch (IOException iOException){
System.out.println("Error Message:" + iOException.getMessage());
}
//ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
} 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();
}
}
return "成功";
}
コントローラ層のテストコードを書く
@Autowired
private AliOssService aliOssService;
@ApiOperation("Oss上传文件")
@PostMapping("/upload")
public Result upload(MultipartFile file){
String upload= aliOssService.upload(file);
return Result.ok().message(upload);
}
リリースエンジニアリング、アクセステスト
OSSコンソール
のバックグラウンドテストが成功しました