2015-10-26 3 views
-1

Я пытаюсь настроить в первый раз службу S3 из Amazon, но я не могу загрузить файл, потому что получаю следующее исключение (я уже дал пользователю полный доступ к S3 , но я получаю это):Amazon S3 - метод не разрешен

Method Not Allowed (Service: Amazon S3, код состояния: 405; Код ошибки: 405 Method Not Allowed; ...)

класс ниже мой класс конфигурации (ключи были изменены на «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-интерфейсом «off label», например, для подключения к ресурсам OpenStack.

Я считаю, что вы можете просто удалить эти две строки («setEndpoint» и «setS3ClientOptions»).

Смежные вопросы