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