0
我想将字符串追加到存储在S3中的文本文件的末尾。 目前我只是将文件的内容读入字符串,追加我的新文本并将文件重新保存回S3。 有没有更好的方法来做到这一点。我想当文件是>>> 10MB然后阅读整个文件不会是一个好主意,所以我应该如何正确地做到这一点?更新亚马逊S3存储桶中的文件
当前代码 [代码]
private void saveNoteToFile(String p_note) throws IOException, ServletException
{
String str_infoFileName = "myfile.json";
String existingNotes = s3Helper.getfileContentFromS3(str_infoFileName );
existingNotes += p_note;
writeStringToS3(str_infoFileName , existingNotes);
}
public void writeStringToS3(String p_fileName, String p_data) throws IOException
{
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(p_data.getBytes());
try {
streamFileToS3bucket( p_fileName, byteArrayInputStream, p_data.getBytes().length);
}
catch (AmazonServiceException e)
{
e.printStackTrace();
} catch (AmazonClientException e)
{
e.printStackTrace();
}
}
public void streamFileToS3bucket(String p_fileName, InputStream input, long size)
{
//Create sub folders if there is any in the file name.
p_fileName = p_fileName.replace("\\", "/");
if(p_fileName.charAt(0) == '/')
{
p_fileName = p_fileName.substring(1, p_fileName.length());
}
String folder = getFolderName(p_fileName);
if(folder.length() > 0)
{
if(!doesFolderExist(folder))
{
createFolder(folder);
}
}
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(size);
AccessControlList acl = new AccessControlList();
acl.grantPermission(GroupGrantee.AllUsers, Permission.Read);
s3Client.putObject(new PutObjectRequest(bucket, p_fileName , input,metadata).withAccessControlList(acl));
}
[/代码]
您可以通过使用Amazon LAMBDA来解决这个问题。然而。如果您只上传更改,则可以触发Lambda代码,这可能会将更改附加到目标对象。仍然需要按照上述方式制作副本,但是重新上传对象(取决于其大小)会更有效率。 – sthede
这仍然需要从Lambda @sthede中下载并重新上传对象。如答案所述,S3中的对象是不可变的。它们只能被替换,而不能修改。 –
似乎S3并不是这个用例的解决方案。文件预计会变得非常大。回到绘图板 – MayoMan