简体   繁体   English

亚马逊 sdk 从 spring 启动 Z93F725A074233D1C889F4F48B 中的 s3 存储桶下载大型 zip 文件

[英]Amazon sdk dowload large zip file from s3 bucket in spring boot java

What I did was trying to download large data zip file from s3 bucket我所做的是尝试从 s3 存储桶下载大数据 zip 文件

        S3ObjectInputStream inputStreams = s3object.getObjectContent(); 
        File newFile = new File(zipFileTempLocation + File.separator + CommonConstant.FILE_NAME);
        FileOutputStream fileOutputStream = new FileOutputStream(newFile);
        GZIPInputStream gzipInputStream = new GZIPInputStream(inputStream);
        LOGGER.info("staring to write {}", newFile.toPath());
        byte[] buffer = new byte[5000];
        int le
        while ((len = gzipInputStream.read(buffer)) > 0) {
            fileOutputStream.write(buffer, 0, len);
        }
        gzipInputStream.close();
        String newFileURl = newFile.getAbsolutePath();
        Path path = Paths.get(url);
        return Files.readAllBytes(path);

} }

when I trying to run my service it says out of heap memory error.当我尝试运行我的服务时,它说堆外 memory 错误。 Can you help me with this?你能帮我解决这个问题吗?

You can have a look at this answer and stream it so it's not loaded into memory.您可以查看答案和 stream 它,因此它不会加载到 memory 中。

  @GetMapping(value = "/downloadfile/**", produces = { MediaType.APPLICATION_OCTET_STREAM_VALUE })
    public ResponseEntity<S3ObjectInputStream> downloadFile(HttpServletRequest request) {
       //reads the content from S3 bucket and returns a S3ObjectInputStream
       S3Object object = publishAmazonS3.getObject("12345bucket", "/logs/file1.log");
       S3ObjectInputStream finalObject = object.getObjectContent();

        final StreamingResponseBody body = outputStream -> {
            int numberOfBytesToWrite = 0;
            byte[] data = new byte[1024];
            while ((numberOfBytesToWrite = finalObject.read(data, 0, data.length)) != -1) {
                System.out.println("Writing some bytes..");
                outputStream.write(data, 0, numberOfBytesToWrite);
            }
            finalObject.close();
        };
        return new ResponseEntity<>(body, HttpStatus.OK);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用适用于Amazon S3存储桶的Java SDK下载大量文件 - Download a Large Number of Files Using the Java SDK for Amazon S3 Bucket 使用 java spring boot 从 Amazon S3 下载图像 - Downloading images from Amazon S3 using java spring boot Spring Boot Amazon AWS S3 存储桶文件下载 - 拒绝访问 - Spring Boot Amazon AWS S3 Bucket File Download - Access Denied 无需SDK的Amazon S3存储桶子对象REST和Java - Amazon S3 bucket sub objects REST and Java without SDK Amazon S3:使用 Java 开发工具包更改存储桶策略 - Amazon S3: Change bucket policy with Java SDK 将文件上传到 Amazon S3 存储桶。 使用适用于 Java v2 的 AWS 开发工具包 - Issuing uploading file to Amazon S3 Bucket. using the AWS SDK for Java v2 Amazon S3-使用Java API递归列出S3存储桶中的所有zip文件 - Amazon S3 - List all the zip files recursively within S3 bucket using Java API AWS Amazon S3 Java SDK-在上传大文件时过期时刷新凭证/令牌 - AWS Amazon S3 Java SDK - Refresh credentials / token when expired while uploading large file 如何使用Java从Amazon S3存储桶中使用其名称下载垂直文件 - how to download a perticular file using it's name from amazon s3 bucket using java 使用java filechooser在Amazon s3存储桶中上传多个文件 - Upload multiple file in amazon s3 bucket using java filechooser
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM