在 FileOpenRead() 工作时加载 StreamContent() 时出现 HttpClient 错误

问题描述 投票:0回答:0

我正在尝试在两个网络服务之间移动 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);
       }
c# .net filestream
© www.soinside.com 2019 - 2024. All rights reserved.