嗨,我正在编写一个Java代码来上传文件到S3桶,但不是上传文件到S3,我需要将一些数据写入S3中的文件名

np8igboo  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(144)

我使用aws-java-sdk-s3依赖项在我的spring Boot App中使用S3库。我写了一些演示代码来上传文件到S3桶

upload(bucketName, key, fileName, s3client);

但我的情况是不同的,我从数据库中获取一些数据,我需要将这些数据写入fileName并将此文件上传到S3桶,如何使用AmazonS 3实现这一点。下面是我尝试做的代码。我只是在这里跳过S3客户端创建以使其简单

public void upload(String fileName,String folderName, List<Map<String,Object>> jsonData){
 String bucketName= “myBucketName”;
 String toFile = folderName + “/” + fileName;
 FileOutputStream os = null; 
 try{
os = new FileOutputStream(fileName);
byte[] strToByte = jsonData.getBytes();
os.write(strToByte);
client.putObject(new PutObjectRequest(bucketName, toFile, new File(fileName)));
    }catch(IOException e){
Log.error(e.getMessage);
   }finally{
os.close();
}
 }

这段代码运行正常,但是在我的本地机器上创建了这个文件的本地副本,并且该文件正在上传到S3存储桶。像这样,我有数百万个文件。我无法将所有这些文件存储在本地系统中。因此,有没有一种方法可以直接将数据写入文件并将其上传到S3而无需存储在任何地方。

p8ekf7hl

p8ekf7hl1#

下面是AWS SDK for Java V2代码,使用**byte[]**上传对象:

private S3Client getClient() {
        return S3Client.builder()
            .region(PhotoApplicationResources.REGION)
            .build();
    }

public void putObject(byte[] data, String bucketName, String objectKey) {
        S3Client s3 = getClient();
        try {
            s3.putObject(PutObjectRequest.builder()
                    .bucket(bucketName)
                    .key(objectKey)
                    .build(),
                RequestBody.fromBytes(data));
        } catch (S3Exception e) {
            System.err.println(e.getMessage());
            e.printStackTrace();
            throw e;
        }
    }

相关问题