我正在尝试在两个网络服务之间移动 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();
// Populate MultipartFormDataContent
content.Add(new StringContent(uploadResponse.fields.key), "key");
content.Add(new StringContent(uploadResponse.fields.ContentType), "Content-Type");
// Add File Stream
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
{
//Upload File to AWS
request.Content = content;
var responseUploadFileMsg = await httpClient.SendAsync(request);
}
我想所有的 StreamContent 对象都不是平等的……请指教。谢谢!
更新
我仍然无法使用 httpClient.GetStreamAsync() 填充 StreamContent,但作为解决方法,我可以将文件写入项目文件夹“wwwroot/Files”,然后使用 File.OpenRead() 读取文件和填充 StreamContent。对于为什么直接使用 httpClient.GetStreamAsync() 填充 StreamContent 会抛出上面列出的错误,我仍然会很感激任何想法。
var httpClient = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, uploadResponse.url);
var content = new MultipartFormDataContent();
// Add File Stream
string fileName = drawingTemp.ProjectNumber + "-" + drawingTemp.Title + ".pdf";
Stream fileSteam = await httpClient.GetStreamAsync(drawingTemp.PdfUrl);
// Convert Stream to File and save temporarily to 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;
// Add File Stream to Content
var fileSteamLocalFile = new StreamContent(File.OpenRead(readFullPath));
content.Add(fileSteamLocalFile, "file", fileName);
content.Add(new StringContent(uploadResponse.uuid), "uuid");
try
{
//Upload File to AWS
request.Content = content;
var responseUploadFileMsg = await httpClient.SendAsync(request);
fileSteamLocalFile.Dispose();
// Delete temp file
if (File.Exists(readFullPath))
{
File.Delete(readFullPath);
}