簡體   English   中英

使用 Spring Boot 和 AWS 寫入大文件的最佳方法

[英]The best approach to write a large file using Spring Boot and AWS

今天我有一個生成文件的過程,將其寫入本地磁盤,然后上傳到 S3。 但是現在我想改變這個過程,我想在 stream 編寫這個文件的同時上傳這個文件。 我正在使用aws-java-sdk ,但我沒有成功實施這種方法。

簡單的代碼來說明我想要做什么:

for (int i = 5000; i > 0; i--) {
                Upload upload;
                //create temp file
                File tempFile = File.createTempFile("teste", ".txt");

                //write
                OutputStream fos = new FileOutputStream(tempFile);
                Writer osw = new OutputStreamWriter(fos);
                BufferedWriter bw = new BufferedWriter(osw);
                bw.write("Test-Upload");
                bw.newLine();
                bw.flush();

                //upload
                FileInputStream fis = new FileInputStream(tempFile);
                ObjectMetadata objectMetadata = new ObjectMetadata();
                objectMetadata.setContentLength(tempFile.length());
                upload = tm.upload(bucketName, key.concat(tempFile.getName()), fis, objectMetadata);
                upload.waitForUploadResult();
            }

今天我的平均問題是我在 memory 中加載文件,當我寫入並在發送到 S3 時再次加載它,我想改進這個過程,但我不知道是否是最好的方法和/或可能,因為在我的搜索中,我沒有發現很多情況。

如果它是帶有數據的文本文件,您可以使用Firehose 它可以將您的數據和 stream 接收到 S3 存儲桶。

public void publish(String data) {
        AmazonKinesisFirehose amaznonFirehose = amaznonFirehose();
        Record record = new Record().withData(ByteBuffer.wrap(data.getBytes()));
        PutRecordRequest putRecordRequest = new PutRecordRequest();
        putRecordRequest.setDeliveryStreamName("your-stream-name");
        putRecordRequest.setRecord(record);
        PutRecordResult putRecordResult = amaznonFirehose.putRecord(putRecordRequest);

    }

    private AmazonKinesisFirehose amaznonFirehose() {
        BasicAWSCredentials basicAwsCredentials = new BasicAWSCredentials(ACCESS_KEY,
                SECRET_KEY);
        return AmazonKinesisFirehoseClient.builder().withRegion(REGION)
                .withCredentials(new AWSStaticCredentialsProvider(basicAwsCredentials)).build();
    }

只需將您的文本發布到 Firehose 的 stream 中,而不是創建 TXT 文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM