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

Azure函数中如何向Blob文件追加新行,避免覆盖原有内容

解决Azure Functions Blob日志追加覆盖问题

问题描述

我正在学习Azure Functions并进行测试实践,拥有两个容器:sample-items(触发容器,用于存放触发函数运行的文件)和sample-logs(需生成BlobStorageTestLogs.txt文件,逐行记录sample-items中每个上传文件的日志信息)。目前遇到的问题是:每次写入新日志时都会覆盖原有内容,仅保留最新一条日志,我需要实现追加新行并保留原有内容的功能,以下是我的函数代码:

[FunctionName("BlobStorageTest")]
public static async Task Run([BlobTrigger("samples-items/{name}", Connection = "testsandpracticesgrb18e_STORAGE")]Stream myBlob, 
[Blob("samples-logs/BlobStorageTestLogs.txt", FileAccess.Write, Connection = "testsandpracticesgrb18e_STORAGE")]Stream outputBlob,
string name, ILogger log)
{
    string contentLog = $"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes";
    log.LogInformation(contentLog);

    //Write on file
    using (var writer = new StreamWriter(outputBlob))
    {
        await writer.WriteLineAsync(contentLog);
    }
}

解决方案

问题根源在于FileAccess.Write模式会直接覆盖现有Blob内容,且写入时未将流指针定位到文件末尾。修改后的代码如下:

[FunctionName("BlobStorageTest")]
public static async Task Run([BlobTrigger("samples-items/{name}", Connection = "testsandpracticesgrb18e_STORAGE")]Stream myBlob, 
[Blob("samples-logs/BlobStorageTestLogs.txt", FileAccess.ReadWrite, Connection = "testsandpracticesgrb18e_STORAGE")]Stream outputBlob,
string name, ILogger log)
{
    string contentLog = $"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes";
    log.LogInformation(contentLog);

    // 将流指针移到文件末尾,实现追加写入
    outputBlob.Seek(0, SeekOrigin.End);
    
    using (var writer = new StreamWriter(outputBlob))
    {
        await writer.WriteLineAsync(contentLog);
    }
}

关键改动说明

  • Totally:�相同了解altern元_struct symbol

一下:

  • 调整文件访问模式:将FileAccess.Write改为FileAccess.ReadWrite,允许同时读取和操作现有Blob
  • 定位流到末尾:通过outputBlob.Seek(0, SeekOrigin.End)把写入位置移到文件末尾,确保新日志追加在原有内容之后
  • 兼容首次创建:如果日志文件尚未存在,Seek操作不会报错,新创建的流默认位置为0,移到末尾后仍从开头写入,符合首次创建需求

内容的提问来源于stack exchange,提问作者Dr oscar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:05:05