提问者:小点点

从服务器下载文件ASP.NET core 404响应


我正在尝试从服务器上下载一组文件作为zip文件。在本地我完全可以做到,但现在我在windows Server2019(IIS)中部署了应用程序,当我尝试下载文件时,我会发现404-文件或目录找不到。

为了以zip的形式下载这组文件,我使用了SharpZipLib库。文件路径都是正确的,我可以通过服务器中的文件系统访问它们。

首先,我将文件上传到发布应用程序的wwwroot中的一个文件夹中。我在wwwroot中的文件夹的结构是:

  • wwwroot
    • 文档
      • 合同

      我以zip方式下载文件的方法:

      public async Task<FileResult> DownloadZipAsync() {
          List<string> filePaths = //linq query to get the file paths.
          //Example of file path: C:\inetpub\wwwroot\SRO\wwwroot\docs\contracts\testing.pdf
      
          var name = "contracts";
      
          var webRoot = _hostingEnvironment.WebRootPath;
          var fileName = name + ".zip";
          var tempOutput = webRoot + "\\docs\\contracts\\" + fileName;
      
          using (ZipOutputStream zipOutputStream = new ZipOutputStream(System.IO.File.Create(tempOutput))) {
              zipOutputStream.SetLevel(9);
              byte[] buffer = new byte[4096];
      
              for (int index = 0; index < filePaths.Count; index++) {
                  ZipEntry entry = new ZipEntry(name + "\\" + Path.GetFileName(filePaths[index]));
                  entry.DateTime = DateTime.Now;
                  entry.IsUnicodeText = true;
                  zipOutputStream.PutNextEntry(entry);
      
                  using (FileStream fileStream = System.IO.File.OpenRead(filePaths[index])) {
                      int sourceBytes;
                      do {
                          sourceBytes = fileStream.Read(buffer, 0, buffer.Length);
                          zipOutputStream.Write(buffer, 0, sourceBytes);
                      } while (sourceBytes > 0);
                  }
              }
              zipOutputStream.Finish();
              zipOutputStream.Flush();
              zipOutputStream.Close();
          }
          byte[] finalReuslt = System.IO.File.ReadAllBytes(tempOutput);
          if (System.IO.File.Exists(tempOutput)) {
              System.IO.File.Delete(tempOutput);
          }
          if (finalReuslt == null && !finalReuslt.Any()) {
              throw new Exception(String.Format("Nothing found"));
          }
          return File(finalReuslt, "application/zip", fileName);
      

      }

      我试图解决的问题有:

      1. 在服务器中,我为IIS_IUSRS用户授予了部署文件夹权限(完全控制)
      2. 对于我的部署文件夹,我创建了用户DefaultAppPool,并授予了完全权限。
      3. IIS中
      4. ->;应用程序池->;myappPoolforNetCore->;高级设置->;标识-在ApplicationPoolIdentity和LocalSystem之间更改。

      也许我的下载方法在部署时工作不正常。我怀疑问题可能在using语句中,特别是在system.io.file.create()方法中。

      通过Visual Studio for ASP.NET Core中的开发时IIS支持,我在本地开发计算机上“部署”了该应用程序。链接

      我做了上面提到的同样的三个步骤,在本例中它是有效的,有一点不同的是文件的路径不同(因为我的应用程序是在本地‘部署’的),它们指向我的C:/。。。。目录。

      如果你能帮我的话,我将不胜感激,因为我在这个问题上陷了很长一段时间了。谢谢


共1个答案

匿名用户

你检查了默剧类型了吗?

尝试添加

。zip-应用程序/zip

。zip-application/x-zip