[SpringBootの背景]AlibabaCloudOSSを統合してファイルのアップロードを実現

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コンソール
ここに画像の説明を挿入
ここに画像の説明を挿入
のバックグラウンドテストが成功しました

おすすめ

転載: blog.csdn.net/qq_29750461/article/details/122906314