【问题标题】:Java cannot find S3 serviceJava 找不到 S3 服务
【发布时间】:2022-01-07 22:26:04
【问题描述】:

我在关注tutorial 时遇到问题 一直在寻找解决方案,但没有结果

IntelliJ 无法从包 amazonaws 服务 S3 读取导入,当我构建应用程序时,错误提示

pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>youtube</artifactId>
        <groupId>pl.marcin</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>backend</artifactId>

    <properties>
        <maven.compiler.source>16</maven.compiler.source>
        <maven.compiler.target>16</maven.compiler.target>
    </properties>


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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
            <dependency>
                <groupId>io.awspring.cloud</groupId>
                <artifactId>spring-cloud-aws-context</artifactId>
                <version>2.3.2</version>
            </dependency>
        <dependency>
            <groupId>io.awspring.cloud</groupId>
            <artifactId>spring-cloud-aws-autoconfigure</artifactId>
            <version>2.3.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>16</source>
                    <target>16</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

与错误相关的类

package pl.marcin.youtube.service;


import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.ObjectMetadata;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.server.ResponseStatusException;

import java.io.IOException;
import java.util.UUID;

@Service
@RequiredArgsConstructor
public class S3Service implements FileService {

    public static final String YOUTUBE_DEMO = "youtube-mw";

    private final AmazonS3Client awsS3Client;

    @Override
    public String uploadFile(MultipartFile file) {

        var filenameExtension = StringUtils.getFilenameExtension(file.getOriginalFilename());
        var key = UUID.randomUUID().toString() + "." + filenameExtension;

        var metadata = new ObjectMetadata();
        metadata.setContentLength(file.getSize());
        metadata.setContentType(file.getContentType());
        try {
            awsS3Client.putObject(YOUTUBE_DEMO, key, file.getInputStream(), metadata);
        } catch (IOException ex){
            throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,
                    "An exception occured while uploading a file");
        }
        awsS3Client.setObjectAcl(YOUTUBE_DEMO, key, CannedAccessControlList.PublicRead);
        return awsS3Client.getResourceUrl(YOUTUBE_DEMO, key);
    }
}

【问题讨论】:

  • 请包含错误文本,而不是图像。
  • 我是教程的作者,我想可能是maven依赖——spring-cloud-aws-context或者spring-cloud-aws-autoconfigure没有正确下载。尝试运行 'mvn clean compile' 强制 maven 下载依赖项。

标签: java spring amazon-web-services


【解决方案1】:

如果您想构建一个适用于 Amazon S3 的 Spring 应用程序,请参阅此 AWS 教程。它将引导您构建一个使用 Amazon S3、Amazon Rekognition 和其他服务的 Java Spring BOOT 应用程序。它还使用适用于 Java V2 的 AWS 开发工具包 - 这是推荐使用的开发工具包。

此应用的用例是分析位于 Amazon S3 存储桶中的许多自然图像。

Detect objects in images with Amazon Rekognition using an AWS SDK

还有一个示例 Spring BOOT 应用程序可以流式传输位于 Amazon S3 存储桶中的视频:

这似乎是你想要做的。见

Building a Spring Boot web application that Streams Amazon S3 content over HTTP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多