2015-10-26 3 views
0

Я хочу загрузить файл в ведро S3 с помощью проекта maven java.Загрузить файл на S3 с помощью java

void uploadFile(String filePath,String fileName) throws IOException{ 
    String bucketName="my-feeds/prod/myfiles/myData"; 
    String currentDir = System.getProperty("user.dir"); 
    input = new FileInputStream(currentDir+"/src/main/resources/keyDetails.properties"); 
    prop.load(input); 
    String YourAccessKeyID = prop.getProperty("accessKey"); 
    String YourSecretAccessKey = prop.getProperty("secretKey"); 
    AWSCredentials credentials = new BasicAWSCredentials(YourAccessKeyID, YourSecretAccessKey); 
    AmazonS3 s3client = new AmazonS3Client(credentials); 
    s3client.putObject(bucketName, fileName, new File(filePath)); 
} 

Но я получаю исключение:

Exception in thread "main" java.lang.NoSuchMethodError: com.amazonaws.AmazonWebServiceRequest.copyPrivateRequestParameters()Ljava/util/Map; 

Что может быть причиной? Пожалуйста помоги.

Мой pom.xml имеет это как зависимость:

<dependency> 
       <groupId>com.amazonaws</groupId> 
       <artifactId>aws-java-sdk-s3</artifactId> 
       <version>1.9.0</version> 
      </dependency> 

Теперь получаю это исключение

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint. (Service: Amazon S3; Status Code: 301; Error Code: PermanentRedirect; " 

После того как я обновить версию

+1

Вы пробовали обновление до последней версии SDK Java SDK? Я считаю, что 1.10.28 - последняя стабильная версия. –

+0

@mbaird Теперь получение этого исключения «Исключение в потоке» main »com.amazonaws.services.s3.model.AmazonS3Exception: Ведро, к которому вы пытаетесь получить доступ, должно быть адресовано с использованием указанной конечной точки. Пожалуйста, отправьте все будущие запросы на эту конечную точку. (Сервис: Amazon S3; Код состояния: 301; Код ошибки: PermanentRedirect; «После обновления версии – GitCoder

ответ

0

Ваше имя ведро недействителен. Строка my-feeds/prod/myfiles/myData выглядит как структура каталогов, которую вы пытаетесь создать, а не имя ведра S3.

Зайдите в свою консоль S3 и найдите имя созданного вами ведра S3 и используйте его как имя ковша. S3 не имеет каталогов, просто объектов, поэтому для эмуляции структуры каталогов вам нужно поместить эти «имена каталогов» в ключ объекта. Другими словами, второй параметр, который вы передаете в putObject(), должен выглядеть примерно так: "/my-feeds/prod/myfiles/myData/" + filename

+0

это будет String keyName ="/my-feeds/prod/myfiles/myData/"+ имя_файла или String keyName = «my-feeds/prod/myfiles/myData»? – GitCoder

+0

Было бы проще попробовать и узнать, чем задавать дополнительные вопросы здесь ... Предлагаю вам прочитать эту документацию от Amazon: http: //docs.aws.amazon. com/AmazonS3/latest/UG/FolderOperations.html –

+0

Нет ошибки. Но файл не загружается на S3 – GitCoder

1

Имя ведра должно быть всего my-feeds. Часть prod/myfiles/myData является частью ключа, а не ведра.

+0

Будет ли это строковым ключомName = "/ my-feeds/prod/myfiles/myData /" + имя_файла или String keyName = «мои-каналы/прод/myfil es/myData "? – GitCoder

+0

Правильно, если «my-feeds» является фактическим именем своего ведра S3, а не именем одной из каталогов, которые он пытается создать. –

+0

@mbaird Это выглядело так «bucketish», что я сразу же предположил, что это ведро. – Kayaman