Problem mit der Dateinamenverkettung beim Hochladen von Alibaba Cloud OSS-Dateien

Tipp: Dieser Artikel dient hauptsächlich dazu, sich an die Punkte zu erinnern, die beim Hochladen von OSS beachtet werden müssen


Vorwort

Wenn Sie oss zum Hochladen einer Datei verwenden, müssen Sie am Ende einen Dateinamen angeben. Wenn Sie jedoch eine Datei mit demselben Namen hochladen, wird die vorherige Datei überschrieben. Daher verwenden wir hier die Verkettung von UUID + Dateinamen, um die Unterscheidung zu erreichen. Gleichzeitig erfordert die allgemeine Unternehmensspezifikation zum Organisieren und Klassifizieren, dass der Dateipfad die Zeit als Standard verwendet, z. B.: jjjj/MM/tt 27.03.2023. Daher befasst sich dieses Papier hauptsächlich mit den oben genannten Inhalten.

1. Was ist OSS?

Es handelt sich um einen massiven, sicheren, kostengünstigen und äußerst zuverlässigen Cloud-Speicherdienst, der 99,9999999999 % (12 Neunen) der Datenpersistenz und 99,995 % der Datenverfügbarkeit bietet. Zur vollständigen Optimierung der Lagerkosten stehen verschiedene Lagertypen zur Verfügung.

2. Verwenden Sie Schritte

1. Bibliothek importieren

Code wie folgt anzeigen:

    <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>

 Das Hutool-Paket wird hier vorgestellt, um die Verarbeitung des Wartezeitformats zu erleichtern

2. Dateicode hochladen

Code wie folgt anzeigen:

Beachten Sie, dass endpoint, accessKeyId, accessKeySecret und accessKeySecret durch die entsprechenden ersetzt werden 

    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();
            }
        }

    }

Einzelheiten entnehmen Sie bitte dem offiziellen Dokument

Einfacher Java-Upload (aliyun.com)


Zusammenfassen

Nehmen Sie es einfach auf

Ich denke du magst

Origin blog.csdn.net/weixin_58403235/article/details/129797069
Empfohlen
Rangfolge