【问题标题】:Download from FTP server to client computer从 FTP 服务器下载到客户端计算机
【发布时间】:2020-06-01 00:12:50
【问题描述】:

我正在处理 ASP.NET 项目,我需要一个用户从 FTP 服务器下载文件并保存到他/她的本地计算机的功能。这些文件位于不同的 FTP 服务器中,并且 ASP.NET 项目托管在不同的服务器中。所以要下载,我传递了服务器地址和 FTP 凭据。当我在本地主机上运行项目时它可以工作,但是当我将项目上传到服务器并尝试从托管站点下载时,文件不会下载并保存到我的电脑上。

这是我下面的代码

 string inputfilepath = @"C:\Temp\"+_filename;
 string ftphost = "advhost11@14.182.126.8:3131";
 string ftpfilepath = _filename;

 string ftpfullpath = "ftp://" + ftphost +"/"+ ftpfilepath;

 using (WebClient request = new WebClient())
 {
      request.Credentials = new NetworkCredential("username", "password");
      byte[] fileData = request.DownloadData(ftpfullpath);

      Directory.CreateDirectory(Path.GetDirectoryName(inputfilepath));

      using (FileStream file = File.Create(inputfilepath))
      {
           file.Write(fileData, 0, fileData.Length);
           file.Close();
      }

      ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('Receipt downloaded and saved at C:\\\\Temp\\\\BankTransfer.');", true);
 }

【问题讨论】:

标签: c# asp.net ftp


【解决方案1】:

(托管)Web 服务器无权访问远程客户端(您的 PC)。保存时,您将保存到 Web 服务器的本地 C 驱动器。如果你想让它们在你的 C 盘上,你需要做以下两件事之一:

  1. 获取您从 FTP 站点(现在位于 Web 服务器上)下载的文件并通过 HTTP 传送回客户端。这意味着您不是通过 FTP 发送文件(具有随之而来的所有优点和缺点),但您也在共享 FTP 凭据。您无法控制客户端保存文件的位置。
  2. 无需将文件下载到 Web 服务器,您只需提供 ftp 协议的链接 ('ftp://...'),包括凭据。这会暴露您的凭据,但它避免了网络服务器的两倍带宽(因为客户端直接下载它),并防止您不必管理现在位于服务器上的文件。如果文件可能被破坏,它还可以避免安全风险(对于 Web 服务器)。您无法控制客户端保存文件的位置。

【讨论】:

  • 所有主要的网络浏览器都在逐渐取消对 FTP 的支持:bleepingcomputer.com/news/google/… - 所以第二个选项不再是一个选项。 + 在第一个选项中,您不共享凭据。
【解决方案2】:

在服务器上保存文件后,将其作为文件返回到客户端的浏览器。你没有提到你的框架,所以这里是如何在 WebFormMVC 上做到这一点。请注意,您无法决定将文件保存在他们计算机上的哪个位置,而是由他们决定是否保存以及保存在何处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 2013-11-04
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    相关资源
    最近更新 更多