Festlegen der region für eine amazonS3-client?

Ich versuche, umzusetzen Datei-upload in eine Java-web-Anwendung. Wenn der Benutzer eine Datei hochlädt, über die UI, ich will, dass es gespeichert in amazon amazon s3-Speicher.

Hier ist mein code für die back-end:

@PostMapping("/upload-file")
public String saveFile(@RequestParam("name") String name, @RequestParam("file")MultipartFile file, RedirectAttributes redirectAttributes){

    AWSCredentials credentials = new BasicAWSCredentials("user", "psw");

    AmazonS3 s3Client = new AmazonS3Client(credentials);

    String bucketName = "kfib";

    s3Client.createBucket(bucketName);

    s3Client.setRegion(com.amazonaws.regions.Region.getRegion(Regions.EU_WEST_1));


    ObjectMetadata md = new ObjectMetadata();
    md.setContentType("application/pdf");

//md.set

    try{
        InputStream inputStream = file.getInputStream();

        s3Client.putObject(new PutObjectRequest(bucketName, name, inputStream, md).withCannedAcl(CannedAccessControlList.PublicRead));

        S3Object s3Object = s3Client.getObject(new GetObjectRequest(bucketName, name));

        log.info("Url of the image:\n");
        log.info(s3Object.getObjectContent().getHttpRequest().getURI().toString());

    }catch(IOException e){
        e.printStackTrace();
    }


    log.info("upload called with post method...");

    return "redirect:/admin/posts";
}

Kann ich hochladen, um die Dateien, wenn ich Sie hochladen, um die Standard-region. Allerdings möchte ich meine Dateien auf einem anderen server. Ich habe einen Eimer in einer EU-region, wenn ich versuche hochladen, da etwas mit dem oben aufgeführten code bekomme ich folgenden Fehler code:

com.amazonaws.services.s3.model.AmazonS3Exception: The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'eu-central-1' (Service: Amazon S3; Status Code: 400; Error Code: AuthorizationHeaderMalformed; Request ID: 8EF630B5F0224C4F)

Scheint es diese Zeile

s3Client.setRegion(com.amazonaws.regions.Region.getRegion(Regions.EU_WEST_1));

nicht haben keine Auswirkung. Was mache ich falsch?

  • AmazonS3Client.setRegion() ist veraltet. Haben Sie nicht versuchen, Sie zu nutzen AwsClientBuilder.setRegion(String)? docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/...
  • Ich bin wahrscheinlich falsch, angesichts der standard-Langweiligkeit von Java, aber s3Client.setRegion(com.amazonaws.regions.Region.getRegion(Regions.EU_WEST_1)); scheint irgendwie... redundant. Ist das nicht einfach s3Client.setRegion(Regions.EU_WEST_1);
  • Sorry @rpuch ich anscheinend verbracht > 5 Minuten schreiben mein Kommentar ist irgendwie redundant selbst, in der Licht von dir... Deine Frage scheint mir besser als meine.
  • Ich nehme an, Sie ersetzt das AccessKey - / SecretKey Werte, die übergeben werden, um BasicAWSCredentials in deinem code oben für die Sicherheit, und sind nicht wirklich die übergabe eines Benutzernamens und Passwort? Es lohnt sich, dass Sie richtig sind wie ich habe eine irreführende Fehlermeldung wie diese Berufung AmazonS3Client.headBucket (), wenn der access key oder secret key ungültig sind.
InformationsquelleAutor handris | 2017-03-25
Schreibe einen Kommentar