当前位置: 首页 > 知识库问答 >
问题:

春云AWS代码找不到S3文件

范轶
2023-03-14

我不明白为什么Spring AWS Cloud代码找不到我的S3文件。我的springbeanxml配置中有“aws-context:context-resource-loader”。我本以为“s3:”资源的使用会像spring一样无缝,因为“classpath:”资源很容易使用。

我知道 AWS 权限和凭证配置正确,因为如果我直接使用 AmazonS3Client,我可以检索有问题的文件。

从Spring端,应自动找到AWS凭据。

以下是运行中的亚马逊S3客户端代码:

public static void main(String [] args) throws IOException {
  AmazonS3 s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());
  System.out.println(s3Client.doesObjectExist("MyBucket", "sample/resource.txt"));
  S3Object object = s3Client.getObject(new GetObjectRequest("MyBucket", "sample/resource.txt"));
  String result = StreamUtils.copyToString(object.getObjectContent(), Charset.forName("UTF-8"));
  System.out.println(result);    
}

下面是Spring Cloud AWS的对等项,它没有找到相同的S3文件:

public class App {
    public static void main(String[] args) throws IOException {
        final AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext("app-context.xml");
        ctx.scan("bdf.sample.spring");
        S3Resource s3Resource = ctx.getBean("S3Resource", S3Resource.class);
        InputStream resource = s3Resource.getResource("s3://MyBucket/sample/resource.txt");
        String result = StreamUtils.copyToString(resource, Charset.forName("UTF-8"));
        System.out.println(result);
    }
}

我有一个System.out.println在S3资源构造函数,显示这个ResourceLoader:

org . spring framework . context . annotation . annotationconfigapplicationcontext

我得到的例外是:

线程“main”Java . io . filenotfoundexception中出现异常:无法打开类路径资源[S3://my bucket/sample/resource . txt],因为它不存在

S3资源:

package bdf.sample.spring;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.io.InputStream;

@Service("S3Resource")
public class S3Resource  {
    private final ResourceLoader resourceLoader;

    @Autowired
    public S3Resource(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
        System.out.println(resourceLoader.getClass());
    }
    public InputStream getResource(String path) throws IOException {
        final Resource resource = resourceLoader.getResource(path);
        return resource.getInputStream();
    }
}

最后是我的SpringXML

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aws-context="http://www.springframework.org/schema/cloud/aws/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/cloud/aws/context
        http://www.springframework.org/schema/cloud/spring-cloud-aws-context.xsd">

    <aws-context:context-resource-loader/>
    <aws-context:context-region region="us-east-1"/>
</beans>

github 链接与相同的代码:https://github.com/BDF/SpringCloudSample

共有1个答案

樊令秋
2023-03-14

一个问题是ResoureLoader对S3的支持没有读取区域属性。

 类似资料:
  • 我有一个很大的文件,其中包含我在应用程序中使用的所有函数。在它的顶部,我包含了名称空间。在文件的唯一内容下面是一个函数的大列表。 我有一个名为的函数,它最初只是将文件加载到本地磁盘并将一条记录插入数据库。现在我想把文件上传到AWS S3桶中,但是当我尝试使用AWS代码时,我在这里找到了:http://docs.AWS.amazon.com/amazons3/latest/dev/uploadobj

  • 问题内容: 我试图从AWS s3读取文件到Java代码: 然后我得到一个错误: java.io.FileNotFoundException:s3n:/mybucket/myfile.txt(无此类文件或目录)位于java.io.FileInputStream.open(本地方法)处java.io.FileInputStream。(FileInputStream.java:146) 有没有办法从AW

  • 我正在尝试运行一个EMR滚烫作业,Scala代码将获取位于S3 bucket中的文本文件的内容。库搞乱了S3路径的正确位置。 对此有什么解决办法或变通办法吗?我尝试使用,但是S3不是一个有效的协议,所以它不接受它。

  • 这里是Java 8。我有一个S3 bucket(),其文件夹子结构如下: 以下是文件夹的外观: 我有一个软件可以将图像文件上传到文件夹,然后我正在编写的另一个应用程序应该处理该图像并将其复制到文件夹。我必须执行这个S3副本的代码如下: 当它运行时,我看到以下日志输出: 但是文件夹的最终状态如下所示: 因此,它不是将复制到目录,而是直接在下创建一个新文件,并将其命名为,并可能将图像的二进制内容复制到

  • 我正在使用CodeBuild来构建Scala sbt项目。在构建过程中,我将执行以下步骤。 来自Git的签出代码。 安装所有sbt工具。 构建代码。 创建Docker 发布docker文件到AWSECR 使用kustomize实用程序更新位于项目根文件夹中的K8s部署文件,其中包含已发布图像的最新信息。 将此文件发布到AWS S3存储桶,以便在AWS EKS上运行进一步部署。 不幸的是,最后一步失

  • 我试图在aws emr上以客户端模式运行一个spark应用程序。我已经设置了一个引导操作来从s3导入所需的文件和jar,并且我有了一个运行单个火花作业的步骤。 然而,当该步骤执行时,没有找到我导入的jar。以下是stderr输出: 19/12/01 13:42:05警告dependencyutils:Local jar/mnt/var/lib/hadoop/steps/s-2hlx7kpzca07