Montón de Java El espacio es insuficiente para cargar archivos en AWS S3

Wicky Memon:

Estoy intentando cargar un archivo en AWS S3 mediante el uso de la API de Java-AWS. El problema es que mi aplicación no puede cargar archivos de gran tamaño debido a la pila está llegando a su límite. Error: espacio de almacenamiento dinámico de Java: java.lang.OutOfMemoryError

Yo personalmente creo que se extiende la pila de memoria no es una solución permanente porque tengo que cargar el archivo hasta 100 gb. Qué tengo que hacer ?

Aquí está el fragmento de código:

        BasicAWSCredentials awsCreds = new BasicAWSCredentials(AID, Akey);
        AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
        .withRegion(Regions.fromName("us-east-2"))
        .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
        .build();

        InputStream Is=file.getInputStream();

        boolean buckflag = s3Client.doesBucketExist(ABuck);
        if(buckflag != true){
           s3Client.createBucket(ABuck);
        }
        s3Client.putObject(new PutObjectRequest(ABuck, AFkey,file.getInputStream(),new ObjectMetadata() ).withCannedAcl(CannedAccessControlList.PublicRead));
xerx593:

Recomiendo fuertemente que setContentLength()el ObjectMetadata, ya que:

..Si no se proporciona, la biblioteca tendrá que amortiguar el contenido del flujo de entrada para el cálculo de la misma.

(..Which previsiblemente dará lugar a OutOfMemory de archivos "grandes" suficientes.)

fuente: javadoc PutObjectRequest

Aplicado a su código:

 // ...
 ObjectMetadata omd = new ObjectMetadata();
 // a tiny code line, but with a "huge" information gain and memory saving!;)
 omd.setContentLength(file.length());

 s3Client.putObject(new PutObjectRequest(ABuck, AFkey, file.getInputStream(), omd).withCannedAcl(CannedAccessControlList.PublicRead));
 // ...

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=202952&siteId=1
Recomendado
Clasificación