Problema de concatenación de nombres de archivo al cargar archivos OSS en la nube de Alibaba

Consejo: este artículo se usa principalmente para recordar los puntos a los que se debe prestar atención al cargar oss


prefacio

Al usar oss para cargar un archivo al final, debe proporcionar un nombre de archivo, pero si carga un archivo con el mismo nombre, el archivo anterior se sobrescribirá, por lo que aquí usaremos la concatenación de UUID+nombre de archivo para lograr la distinción. Al mismo tiempo, para organizar y clasificar, la especificación empresarial general requiere que la ruta del archivo use el tiempo como estándar, como: yyyy/MM/dd 2023/03/27. Por lo tanto, este artículo aborda principalmente el contenido anterior.

1. ¿Qué es el SFA?

Es un servicio de almacenamiento en la nube masivo, seguro, de bajo costo y altamente confiable que proporciona el 99,9999999999 % (12 nueves) de persistencia de datos y el 99,995 % de disponibilidad de datos. Hay una variedad de tipos de almacenamiento disponibles para optimizar completamente los costos de almacenamiento.

2. Usar pasos

1. Importar biblioteca

el código se muestra a continuación:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.1</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.16</version>
        </dependency>
    </dependencies>

 El paquete hutool se presenta aquí para facilitar el procesamiento del formato de tiempo de espera

2. Subir código de archivo

el código se muestra a continuación:

Tenga en cuenta que el punto final, accessKeyId, accessKeySecret y accessKeySecret se reemplazan con sus correspondientes 

    public String uploadFileAvatar(MultipartFile file) {
        //下面四个属性记得换成自己的
        String endpoint = ConstantPropertiesUtil.END_POINT;
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstantPropertiesUtil.KEY_ID;
        String accessKeySecret = ConstantPropertiesUtil.KEY_SECRET;
        // 填写Bucket名称,例如examplebucket。
        String bucketName = ConstantPropertiesUtil.BUCKET_NAME;

        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
//拼接代码如下
        String fileName = file.getOriginalFilename();
        String uuid = UUID.randomUUID().toString().replace("-", "");
        String path = LocalDateTimeUtil.format(LocalDateTimeUtil.now(),"yyyy/MM/dd");
        //拼接
        fileName = path + "/" + uuid + fileName;

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            InputStream inputStream = file.getInputStream();
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, inputStream);
            // 设置该属性可以返回response。如果不设置,则返回的response为空。
            putObjectRequest.setProcess("true");
            // 创建PutObject请求。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            // 如果上传成功,则返回200。
            System.out.println(result.getResponse().getStatusCode());
            String url = "http://"+bucketName+"."+endpoint+"/"+fileName ;
            return url;
        } 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());
            return null;
        } 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());
            return null;
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }

    }

Para obtener más información, consulte el documento oficial.

Carga simple de Java (aliyun.com)


Resumir

Simplemente grabalo~

Supongo que te gusta

Origin blog.csdn.net/weixin_58403235/article/details/129797069
Recomendado
Clasificación