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

ASP.NET Core 6 Web API如何将文件下载保存至指定路径?

实现将S3文件保存到指定本地路径的ASP.NET Core Web API接口

你需要修改现有接口,新增本地路径参数,并将S3返回的文件流写入到指定路径,而非返回给客户端浏览器。以下是具体实现方案:

修改后的代码

[HttpGet("download-to-path")]
public async Task<IActionResult> DownloadFileToPath(string bucketName, string fileName, string filePath)
{
    // 参数合法性校验
    if (string.IsNullOrWhiteSpace(bucketName) || string.IsNullOrWhiteSpace(fileName) || string.IsNullOrWhiteSpace(filePath))
    {
        return BadRequest("bucketName、fileName和filePath参数不能为空");
    }

    var amUp = new AmazonUploader();
    using (var amazonS3client = amUp.GetS3Client())
    {
        try
        {
            var response = await amazonS3client.GetObjectAsync(new GetObjectRequest()
            {
                BucketName = bucketName,
                Key = fileName
            });

            if (response.ResponseStream == null)
            {
                return NotFound("指定的S3文件不存在");
            }

            // 提前创建目标文件所在目录(避免目录不存在导致写入失败)
            var targetDirectory = Path.GetDirectoryName(filePath);
            if (!Directory.Exists(targetDirectory))
            {
                Directory.CreateDirectory(targetDirectory);
            }

            // 将S3文件流写入本地指定路径
            using (var localFileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
            {
                await response.ResponseStream.CopyToAsync(localFileStream);
            }

            return Ok($"文件已成功保存到路径:{filePath}");
        }
        catch (AmazonS3Exception s3Ex)
        {
            return StatusCode(StatusCodes.Status500InternalServerError, $"S3服务操作异常:{s3Ex.Message}");
        }
        catch (IOException ioEx)
        {
            return StatusCode(StatusCodes.Status500InternalServerError, $"本地文件写入异常:{ioEx.Message}");
        }
        catch (Exception ex)
        {
            return StatusCode(StatusCodes.Status500InternalServerError, $"未知异常:{ex.Message}");
        }
    }
}

关键改动说明

  • 新增参数:添加filePath参数,用于接收客户端指定的本地保存路径
  • 流处理逻辑调整:不再返回File结果给浏览器,而是将S3返回的ResponseStream通过CopyToAsync写入到本地文件流
  • 目录预创建:提前检查并创建目标文件所在的目录,避免因目录不存在导致写入失败
  • 增强异常处理:捕获S3操作、本地文件IO等场景的异常,返回更明确的错误信息
  • 参数校验:增加必填参数的合法性检查,避免无效请求

注意事项

  • 权限配置:确保运行API的进程拥有对filePath指定路径的写入权限,否则会抛出权限不足的异常
  • 路径合法性校验:建议额外添加对filePath格式的合法性检查,避免客户端传入无效路径
  • 大文件优化:如果需要处理超大文件,可考虑分块写入或调整流缓冲区大小,提升写入性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:26:20