[英]Best approach for large file transfer to multiple clients using java sockets
[英]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.