[Fondo de SpringBoot] Integre Alibaba Cloud OSS para realizar la carga de archivos

Para el uso básico de OSS, consulte el artículo anterior. Haga clic para ingresar . Aquí presentamos principalmente cómo SpringBoot opera Alibaba Cloud OSS para lograr la carga de archivos.

1 código ServiceImpl.java, consulte la documentación oficial para ingresar

inserte la descripción de la imagen aquí
Este es el código en el documento oficial, pueden ver que aquí está la implementación de cargar un fragmento de texto: "Hola OSS"

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();
            }
        }
    }
}
Agregar un método de autenticación unificado en ServiceImpl

Cuando leamos la documentación oficial, encontraremos que cada método de operar OSS tendrá los siguientes prefijos de autenticación de identidad.Si se agrega el siguiente contenido a cada método, el código será redundante.

  // 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";

Así que configuramos el siguiente segmento de código. Para el código específico, consulte el artículo anterior . Este método se puede cargar después de inicializar el bean. Por supuesto, también se puede implementar usando un bloque de código no estático simple.

//首先定义相关的类全局属性
//存放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();
    }
Con la definición anterior, en realidad puede escribir el método de carga como
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 "成功";
    }
Escriba el código de prueba de la capa del controlador
	@Autowired
	private AliOssService aliOssService;
	@ApiOperation("Oss上传文件")
    @PostMapping("/upload")
    public Result upload(MultipartFile file){
    
    
        String upload= aliOssService.upload(file);
        return Result.ok().message(upload);
    }
Ingeniería de lanzamiento, pruebas de acceso

inserte la descripción de la imagen aquí
La prueba en segundo plano de la consola OSS
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
tuvo éxito

Supongo que te gusta

Origin blog.csdn.net/qq_29750461/article/details/122906314
Recomendado
Clasificación