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

使用HttpClient.GetStreamAsync加载StreamContent报错,File.OpenRead正常

直接通过HttpClient.GetStreamAsync生成StreamContent上传PDF时出现连接关闭错误

我需要在两个Web服务之间传输PDF文件。最初通过await httpClient.GetStreamAsync(varPdfUrl)将文件下载到本地存储,再用File.OpenRead()读取流上传到目标服务(这部分代码已注释),但尝试直接用await httpClient.GetStreamAsync(varPdfUrl)生成StreamContent时,出现以下错误:

错误信息:

System.Net.Http.HttpRequestException: 复制内容到流时出错。
---> System.IO.IOException: 无法将数据写入传输连接:远程主机强迫关闭了一个现有的连接。

原始代码

var httpClient = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, uploadResponse.url);
var content = new MultipartFormDataContent();

// 填充MultipartFormDataContent 
content.Add(new StringContent(uploadResponse.fields.key), "key");
content.Add(new StringContent(uploadResponse.fields.ContentType), "Content-Type");

// 添加文件流
string fileName = drawingTemp.ProjectNumber + "-" + drawingTemp.Title + ".pdf";

//string localPath = @"C:\... \CMP\Drawing Downloads\";
//var fileSteamLocalFile = new StreamContent(File.OpenRead(localPath + fileName));
//content.Add(fileSteamLocalFile, "file", fileName);

var fileSteam = new StreamContent(await httpClient.GetStreamAsync(drawingTemp.PdfUrl));
content.Add(fileSteam, "file", fileName );

content.Add(new StringContent(uploadResponse.uuid), "uuid");

try
{
    //上传文件到AWS
    request.Content = content;
    var responseUploadFileMsg = await httpClient.SendAsync(request);
}

临时解决方案

目前通过将文件先写入项目文件夹wwwroot/Files,再用File.OpenRead()读取生成StreamContent的方式成功上传,但仍想了解直接用HttpClient.GetStreamAsync()生成StreamContent报错的原因。

对应代码:

var httpClient = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, uploadResponse.url);
var content = new MultipartFormDataContent();

// 添加文件流
string fileName = drawingTemp.ProjectNumber + "-" + drawingTemp.Title + ".pdf";
Stream fileSteam = await httpClient.GetStreamAsync(drawingTemp.PdfUrl);

// 将流转换为文件并临时保存到wwwroot/Files 
string writeFullPath = @"wwwroot\Files\" + fileName;

if (!File.Exists(writeFullPath))
{
    using var fileLocalPath = File.Create(writeFullPath);
    {
        fileSteam.CopyTo(fileLocalPath);
        fileSteam.Dispose();
    }
}

string readFullPath = Environment.CurrentDirectory + @"\wwwroot\Files\" + fileName;

// 将文件流添加到内容中
var fileSteamLocalFile = new StreamContent(File.OpenRead(readFullPath));
content.Add(fileSteamLocalFile, "file", fileName);

content.Add(new StringContent(uploadResponse.uuid), "uuid");

try
{
    //上传文件到AWS
    request.Content = content;
    var responseUploadFileMsg = await httpClient.SendAsync(request);
    fileSteamLocalFile.Dispose();

    // 删除临时文件 
    if (File.Exists(readFullPath))
    {
        File.Delete(readFullPath);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:10:15