2015-10-26 169 views
-1

我想第一次配置亚马逊的S3服务,但我无法上传文件,因为我得到以下异常(我已经给了用户完全访问S3的权限,但我不断收到此):Amazon S3 - 方法不允许

不允许的方法(服务:亚马逊S3;状态代码:405;错误代码:405不允许的方法; ...)

下面的类我的配置类(为了安全,密钥更改为“xxx”):

public class AmazonConfiguration { 

    private final String ACCESS_KEY = "xxxxxxxxx"; 
    private final String SECRET_KEY = "xxxxxxxxx"; 

    @Bean 
    private AmazonS3 amazonS3client() { 

     //Credenciais de acesso 
     AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY); 

     AmazonS3 s3Client = new AmazonS3Client(credentials, new ClientConfiguration()); 
     s3Client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true)); 
     s3Client.setEndpoint("http://springmvccasadocodigo.s3-website-us-west-2.amazonaws.com/"); //springmvccasadocodigo.s3-website-sa-east-1.amazonaws.com 

     return s3Client; 
    } 

} 

下节课是我尝试上传的文件:

@Component 
public class FileServer { 

    @Autowired 
    private HttpServletRequest request; 

    @Autowired 
    private AmazonS3 s3; 



    public String writeAmazonS3(String baseFolder, MultipartFile multpartFile) { 

     try { 

      s3.putObject("springmvccasadocodigo", 
        multpartFile.getOriginalFilename(), 
        multpartFile.getInputStream(), new ObjectMetadata()); 

      return "http://springmvccasadocodigo.s3-website-us-west-2.amazonaws.com/" 
        + multpartFile.getOriginalFilename() + "?noAuth=true"; 

     } catch (AmazonClientException | IOException e) { 
      e.printStackTrace(); 
      throw new RuntimeException(); 
     } 
    } 
} 

任何人都知道如何解决?

谢谢你们!

回答

1
s3Client.setEndpoint("http://springmvccasadocodigo.s3-website-us-west-2.amazonaws.com/"); //springmvccasadocodigo.s3-website-sa-east-1.amazonaws.com 

这不是一个合适的终点。并且将它与“路径样式访问”相结合使得它更难以调试。 (“路径式语法...要求您在尝试访问存储桶时使用特定于区域的端点。”)

Here's the list of endpoints;如果您的存储桶位于us-west-2,则正确的端点是s3-us-west-2.amazonaws.com。但是,这对于API的“非标签”使用非常有用,例如连接到OpenStack资源。

我相信你可以简单地删除这两行(“setEndpoint”和“setS3ClientOptions”)。