Передать zip архив на YandexCloud S3

После выполнения запроса получаю JSON:

{
    "presigned_data": {
        "url": "https://storage.yandexcloud.net/ai-research-from-client-test-test",
        "fields": {
            "acl": "private",
            "Content-Type": "binary/octet-stream",
            "key": "mykey/test",
            "x-amz-algorithm": "AWS4-HMAC-SHA256",
            "x-amz-credential": "mycretential/20240321/ru-central1/s3/aws4_request",
            "x-amz-date": "20240321T051254Z",
            "policy": "test",
            "x-amz-signature": "mysignature"
        }
    },
    "task_id": "a205ee43-4671-4679-ad11-7f0608bb7a02"
}

Пытаюсь передать zip архив следующим образом:

public class S3Uploader {
    private RestTemplate restTemplate = new RestTemplate();

    public void uploadFileToS3(String filePath) throws Exception {
    
        byte[] fileBytes = Files.readAllBytes(new File(filePath).toPath());

        String presignedUrl = "https://storage.yandexcloud.net/ai-research-from-client-test-test";

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

        headers.set("x-amz-algorithm", "AWS4-HMAC-SHA256");
        headers.set("x-amz-credential", "mycretential/20240321/ru-central1/s3/aws4_request");
        headers.set("x-amz-date", "20240321T051254Z");
        headers.set("x-amz-signature", "mysignature");
        headers.set("acl", "private");
        headers.set("Content-Type", "binary/octet-stream");
        headers.set("key", "mykey/test");
        headers.set("policy", "test");

        HttpEntity<byte[]> requestEntity = new HttpEntity<>(fileBytes, headers);
        ResponseEntity<String> response = restTemplate.exchange(presignedUrl, HttpMethod.PUT, requestEntity, String.class);

        if (response.getStatusCode().is2xxSuccessful()) {
            System.out.println("Файл успешно загружен в S3 на Yandex Cloud.");
        } else {
            System.out.println("Ошибка загрузки файла в S3 на Yandex Cloud: " + response.getStatusCode());
        }
    }

    public void test() {
        String filePath = "C:\\Users\\User\\Desktop\\tmp\\test.zip";

        try {
            uploadFileToS3(filePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Но получаю ошибку:

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "MalformedXMLThe XML you provided was not well-formed or did not validate against our published schema./ai-research-from-client-test-testb1612fff996c2022"

Подскажите пожалуйста что делаю не так? Может кто-то сталкивался с такой проблемой.


Ответы (0 шт):