【问题标题】:FTP transfer via ASP.net page通过 ASP.net 页面进行 FTP 传输
【发布时间】:2013-03-24 00:56:30
【问题描述】:

我对开发还很陌生,但我遇到了一个我还没有找到解决方案的问题。无论如何,我似乎无法找到是否可以解决..

我想创建一个允许用户从 ftp 服务器下载整个文件夹的 asp 页面。 ftp 服务器本身与 asp 站点不在同一台物理服务器上。让问题更复杂的是,我想使用在浏览器中似乎无法使用的显式或隐式传输。

网页充当客户端和 ftp 服务器之间的中介,旨在尽可能方便用户使用。例如。用户只需按下下载,它会自动从 ftp 服务器下载,而无需使用已安装的本地客户端。

  1. 客户端->asp页面->ftp服务器
  2. 客户端

我的问题是asp页面没有在客户端系统上创建文件的权限。我已成功连接到 ftp 并尝试下载文件夹中的所有文件,但这些文件没有出现在客户端的目标文件夹中。

我可能只是在搜索错误的术语,但如果有任何反馈,我将不胜感激。

【问题讨论】:

  • 让我看看我是否理解你的正确.. 在服务器端,1。你能够连接到 FTP 2. 获取所有文件 3. 但是在客户端的 PC 上存储时你有困难吗?我问的原因是我认为您不能将文件直接写入最终用户硬盘。您最多可以使用“Http Response”对象创建附件并使其可用?
  • 没错,我设法创建到 ftp 的连接并开始下载。将其保存到最终用户硬盘驱动器的困难是正确的。我只希望网页促进最终用户和 ftp 之间的连接。我不希望网页从 ftp 下载任何文件,然后将它们发送给最终用户。
  • 就像我说的,我对开发还很陌生,但我肯定会检查“Http Response”,看看我是否可以设法让某些东西工作。

标签: c# asp.net ftp


【解决方案1】:

当您说“客户端”时,我假设您指的是 asp.net 服务器。在这种情况下,您需要检查您网站的应用程序池在哪个用户下运行。然后,您需要确保用户对您存储 ftp 文件的文件夹具有写入权限。

用户最有可能是网络服务。

【讨论】:

  • 不太对,“客户端”是指最终用户或最终用户浏览器(客户端)。
【解决方案2】:

您的 ASP 站点将无法直接写入最终用户的系统。试想一下,您是否希望任何网站都可以直接访问您的文件系统?

您可以将文件下载到 Web 服务器上的临时文件夹,然后在响应中使用 write it 来提示用户下载它。

Here is a SO question regarding downloading files in ASP.NET

【讨论】:

  • 是的,我在获得许可的情况下发现了这一点。这样做的缺点是传输时间会加倍,因为每次传输都必须通过网络服务器,然后到达最终用户。另外,如果您想下载一个包含 90 个文件的文件夹,您不会收到 90 个“批准下载”或其他提示吗?
  • 您可以将文件下载到 Web 服务器并将它们添加到 zip 文件中进行下载。您是正确的,因为 ASP 站点需要时间来下载每个文件,然后最终用户的浏览器下载 .zip 文件。这是关于下载 ZIP 文件的另一个 SO 问题:stackoverflow.com/questions/2670263/…
  • 感谢您的帮助,我一定会检查出来的。即使我可能不得不修改我对网站功能的最初想法。
  • 如果最终用户的 PC 可以访问 FTP 站点,您可以编写一个控制台应用程序将文件直接下载到最终用户的文件系统。我之前已经这样做了,以将文件下载为计划任务。但这需要在最终用户的计算机而不是网站上运行应用程序。祝你好运!
  • 是的,我试图避免需要本地应用程序。但是,这似乎是最简单的方法。
【解决方案3】:

从我们问题的评论讨论中,您似乎希望为用户提供一个选项,以下载您从 ftp 服务器在服务器端收集的文件

//Connect to your file
FileStream sourceFile = new FileStream(Server.MapPath(@"FileName"), FileMode.Open);
float FileSize= sourceFile.Length;

//Write the file content to a byte Array 
byte[] getContent = new byte[(int)FileSize];
sourceFile.Read(getContent, 0, (int)sourceFile.Length);
sourceFile.Close();

//Build HTTP Response object
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Length", getContent.Length.ToString());
Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.BinaryWrite(getContent);
Response.Flush();
Response.End();

请查看上面的代码是否有帮助。 另外,请查看HTTP Response file Attachment Discussion

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多