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

如何使用C# .NET在Azure中修改用户上传的.csv文件并生成链接?

使用C# .NET处理Azure存储中的CSV文件并生成访问链接

以下是完整的实现流程,包含CSV列处理、Azure Blob存储操作和访问链接生成的核心代码:

1. 准备依赖

首先在Azure Functions项目中安装必要的NuGet包:

  • Azure.Storage.Blobs:用于Azure Blob存储的操作
  • CsvHelper:用于高效读写CSV文件(处理列操作更便捷)

可以通过Package Manager控制台安装:

Install-Package Azure.Storage.Blobs
Install-Package CsvHelper

2. 核心实现代码

定义CSV数据模型

先创建对应原CSV列的模型,以及处理后的扩展模型:

public class OriginalCsvRecord
{
    public string Slashtag { get; set; }
    public string URL { get; set; }
}

public class ModifiedCsvRecord : OriginalCsvRecord
{
    public string NewColumn { get; set; } // 新增的第三列
}

处理CSV并重新存储的函数逻辑

假设你的Azure函数已经能接收上传的CSV并存储到input-container容器,以下是处理函数的核心代码:

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Specialized;
using Azure.Storage.Sas;
using CsvHelper;
using CsvHelper.Configuration;
using System.Globalization;
using System.IO;

public static async Task<string> ProcessCsvAndGenerateLink(string inputBlobName, string connectionString)
{
    // 1. 初始化Blob客户端
    var blobServiceClient = new BlobServiceClient(connectionString);
    var inputContainerClient = blobServiceClient.GetBlobContainerClient("input-container");
    var outputContainerClient = blobServiceClient.GetBlobContainerClient("output-container"); // 存储修改后的文件
    await outputContainerClient.CreateIfNotExistsAsync();

    // 2. 读取原CSV内容
    var inputBlobClient = inputContainerClient.GetBlobClient(inputBlobName);
    using var inputStream = new MemoryStream();
    await inputBlobClient.DownloadToAsync(inputStream);
    inputStream.Position = 0;

    // 3. 处理CSV:添加第三列并填充数据
    using var reader = new StreamReader(inputStream);
    using var csvReader = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture));
    var originalRecords = csvReader.GetRecords<OriginalCsvRecord>().ToList();

    var modifiedRecords = originalRecords.Select(record => new ModifiedCsvRecord
    {
        Slashtag = record.Slashtag,
        URL = record.URL,
        NewColumn = GenerateNewColumnValue(record.Slashtag, record.URL) // 自定义填充逻辑
    }).ToList();

    // 4. 将修改后的数据写入新的CSV流
    using var outputStream = new MemoryStream();
    using var writer = new StreamWriter(outputStream);
    using var csvWriter = new CsvWriter(writer, new CsvConfiguration(CultureInfo.InvariantCulture));
    csvWriter.WriteRecords(modifiedRecords);
    await writer.FlushAsync();
    outputStream.Position = 0;

    // 5. 上传修改后的CSV到Azure存储
    var outputBlobName = $"modified_{inputBlobName}";
    var outputBlobClient = outputContainerClient.GetBlobClient(outputBlobName);
    await outputBlobClient.UploadAsync(outputStream, overwrite: true);

    // 6. 生成访问链接(使用SAS令牌,有效期可自定义)
    var sasBuilder = new BlobSasBuilder()
    {
        BlobContainerName = outputContainerClient.Name,
        BlobName = outputBlobName,
        Resource = "b", // 指定为Blob资源
        ExpiresOn = DateTimeOffset.UtcNow.AddHours(24) // 链接有效期24小时
    };
    sasBuilder.SetPermissions(BlobSasPermissions.Read); // 仅赋予读取权限

    var sasToken = sasBuilder.ToSasQueryParameters(new StorageSharedKeyCredential(blobServiceClient.AccountName, GetAccountKey(connectionString))).ToString();
    var accessUrl = $"{outputBlobClient.Uri}?{sasToken}";

    return accessUrl;
}

// 自定义第三列数据填充逻辑示例
private static string GenerateNewColumnValue(string slashtag, string url)
{
    // 这里可以根据业务需求自定义,比如拼接Slashtag和URL的哈希值、生成短链等
    return $"{slashtag}_processed_{Uri.EscapeDataString(url.Substring(0, Math.Min(url.Length, 20)))}";
}

// 从连接字符串中提取存储账户密钥(也可以通过Azure AD身份验证替代)
private static string GetAccountKey(string connectionString)
{
    var parts = connectionString.Split(';');
    foreach (var part in parts)
    {
        if (part.StartsWith("AccountKey=", StringComparison.OrdinalIgnoreCase))
        {
            return part.Substring("AccountKey=".Length);
        }
    }
    throw new InvalidOperationException("无法从连接字符串中提取账户密钥");
}

3. 关键说明

  • CSV处理:使用CsvHelper可以避免手动解析CSV的繁琐,同时支持灵活的列映射和数据转换,处理带引号、逗号等特殊字符的CSV更可靠。
  • Azure存储权限:生成SAS令牌时,建议仅赋予必要的权限(如Read),并设置合理的有效期,避免安全风险。如果你的场景允许,也可以使用Azure AD身份验证生成链接,无需共享密钥。
  • 错误处理:实际生产环境中需要添加异常捕获(如Blob不存在、CSV格式错误等),并返回友好的错误信息。
  • 容器配置:确保output-container容器的访问策略配置正确,若需要公开访问,可设置容器为Blob匿名访问,但SAS令牌方式更安全可控。

内容的提问来源于stack exchange,提问作者kamran bajwa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:05:25