\ DriveHQ Customer Support Forum \
已读/回复 : 103610/7
  • DriveHQSupport_
  • (676帖子)
FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器

许多用户询问如何在自己的软件项目中连接到 DriveHQ 的 FTP 服务器。本文首先提供一些关于 FTP 的基本信息,然后提供一些 C# 源代码。

DriveHQ 提供 FTP 服务器托管服务。我们支持标准的 FTP 和 FTPS 协议。我们 FTP 服务的主要优势之一是:它与我们广泛的云 IT 服务无缝集成。用户可以使用 Web 浏览器访问他们的 FTP 文件。 映射驱动器(WebDAV) 或者使用 DriveHQ 文件管理器客户端软件。他们还可以使用我们基于 Web 的群组管理工具来创建和管理 FTP 用户(子用户)。

普通的FTP协议由于传输数据时未加密,因此被认为是不安全的。为了获得更强的SSL安全性,可以使用FTPS(基于SSL/TLS的FTP)。有两种方法可以启用SSL安全机制:

隐式: FTP客户端直接连接到特殊的FTPS端口号(默认端口号为990);

显式(FTPES): FTP 客户端连接到常规 FTP 端口号 21,然后发出 STARTTLS 命令来升级安全性。

DriveHQ的FTP服务器同时支持FTPS和FTPES。大多数FTP客户端应用程序也支持FTPS和FTPES,例如FileZilla、CuteFTP、WsFTP、SmartFTP、WinSCP和Fetch等。

还有一种名为 SFTP 的安全文件传输协议,它经常与“安全 FTP”混淆;实际上,SFTP 指的是“SSH 文件传输协议”,这是一种完全不同的文件传输协议。从安全性的角度来看,SSL/TLS 和 SSH 基本相同。显然,SSL/TLS 比 SSH 更流行。DriveHQ 的 FTP 服务器不支持 SFTP,因为我们认为目前没有很强的 SFTP 需求。

主动模式和被动模式 FTP:

FTP 连接可能包含两个 TCP 连接(通道):命令通道和数据通道。命令通道用于发送 FTP 命令;数据通道用于传输大量数据。主动模式 FTP 需要 FTP 服务器回连 FTP 客户端以建立数据连接。这种方式通常被认为不安全,并会被许多防火墙/路由器阻止。被动模式 FTP 需要 FTP 客户端连接到 FTP 服务器的不同端口号。这种方式被认为安全,很少被阻止。DriveHQ 的 FTP 服务器同时支持主动模式和被动模式 FTP。但是,如果您的路由器/防火墙或安全软件阻止了主动模式 FTP,则该功能将无法正常工作。值得注意的是,大多数新型路由器都支持主动模式 FTP。

请注意:微软的命令行FTP客户端不支持被动FTP。几乎所有其他FTP客户端程序都同时支持主动FTP和被动FTP。

FTP 和 ProFTP

DriveHQ 拥有两个 FTP 站点,一个是 ftp.drivehq.com,所有用户均可访问;另一个是 proftp.drivehq.com,仅限付费会员(包括付费群组帐户的子用户)使用。由于 proftp.drivehq.com 仅供付费会员使用,因此不支持匿名 FTP。有关我们 FTP 服务器托管服务的更多信息,请访问[此处插入链接]:

http://www.drivehq.com/servicemanual.aspx#_Toc265186728

 

FTP客户端源代码示例

以下 C# 源代码按原样提供,不提供任何支持。您可以随意将其用于您自己的软件或重新分发。示例代码演示了如何连接到我们的 FTP 服务器并执行 FTP 命令,例如 LIST、GET 和 PUT;您还可以了解如何将其设置为使用被动 FTP 和 SSL。


使用 System;
使用 System.Collections.Generic;
使用 System.Linq;
使用 System.Text;
使用 System.Threading.Tasks;
使用 System.Net;
使用 System.IO;
使用 System.Security.Cryptography.X509Certificates;

/// <摘要>
/// 版权所有 (c) 2003-2016,Drive Headquarters, Inc. 
/// 
/// FTP 客户端示例代码展示了如何使用 C# 连接到 DriveHQ 的 FTP 服务器。
/// 您可以免费使用或重新分发此代码。代码按原样提供,不提供任何修改 
/// 不提供任何支持或担保。DriveHQ 对使用此代码不承担任何责任。
///
命名空间 FTPClientSample
{
    课程项目
    {
        static string ftpServer = "ftp.drivehq.com"; // 如果您有付费帐户,也可以使用 proftp.drivehq.com。
        static string username = "YOUR_USERNAME"; // 您的 DriveHQ 用户名
        static string password = "YOUR_PASSWORD"; // 您的 DriveHQ 密码
        static void Main(string[] args)
        {
            // 列出 FTP 服务器上的一个文件夹
            //列表(”/”); 

            // 从 FTP 服务器下载文件
            //DownloadFile("ServerFileName.jpg", @"c:\temp\ClientFileName.jpg");

            // 将文件上传到 FTP 服务器
            UploadFile(@"c:\temp\ClientFileName.jpg", "/temp/ServerFileName.jpg");
        }


        /// <摘要>
        /// 将文件上传到FTP服务器。
        ///
        /// 本地文件路径
        /// FTP 服务器上的路径,例如 /temp/filename
        ///
        public static bool UploadFile(string srcFilePath, string destFilePath = null)
        {
            如果 (String.IsNullOrWhiteSpace(srcFilePath))
                throw new ArgumentNullException("源文件路径。");

            如果 (String.IsNullOrWhiteSpace(destFilePath))
                destFilePath = Path.GetFileName(srcFilePath);

            Uri serverUri = GetUri(destFilePath);

            // serverUri 应以 ftp:// 协议开头。
            如果 (serverUri.Scheme != Uri.UriSchemeFtp)
                返回 false;

            FtpWebRequest request = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.UploadFile);

            // 将文件内容读取到字节数组中
            FileStream sourceStream = new FileStream(srcFilePath, FileMode.Open, FileAccess.Read);
            byte[] fileContent = new byte[sourceStream.Length];
            sourceStream.Read(fileContent, 0, fileContent.Length);
            sourceStream.Close();

            // 将文件内容发送到 FTP 服务器
            request.ContentLength = fileContent.Length;
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContent, 0, fileContent.Length);
            requestStream.Close();

            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            Console.WriteLine("响应状态:{0} - {1}", response.StatusCode, response.StatusDescription);

            返回 true;
        }

        /// <摘要>
        /// 将 FTP 服务器上的 srcFilePath 文件下载到 destFilePath 文件夹。(如果 destFilePath 为空,则保存到当前文件夹)
        ///
        ///
        ///
        ///
        public static bool DownloadFile(string srcFilePath, string destFilePath = null)
        {
            如果 (String.IsNullOrWhiteSpace(srcFilePath))
                throw new ArgumentNullException("源文件路径。");

            如果 (String.IsNullOrWhiteSpace(destFilePath))
                destFilePath = Path.GetFileName(srcFilePath);

            Uri serverUri = GetUri(srcFilePath);

            //// serverUri 应以 ftp:// 协议开头。
            如果 (serverUri.Scheme != Uri.UriSchemeFtp)
                返回 false;

            FtpWebRequest request = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.DownloadFile);

            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();

            FileStream fileStream = new FileStream(destFilePath, FileMode.OpenOrCreate, FileAccess.Write);

            byte[] buffer = new byte[32 * 1024];

            while(true) {
                int bytesRead = responseStream.Read(buffer, 0, buffer.Length);
                如果 (bytesRead == 0)
                    休息;

                fileStream.Write(buffer, 0, bytesRead);
            }
            fileStream.Close();

            Console.WriteLine("响应状态:{0} - {1}", response.StatusCode, response.StatusDescription);

            返回 true;
        }

        /// <摘要>
        /// 列出FTP文件夹的内容
        ///
        ///
        ///
        public static string List(string path)
        {

            Uri serverUri = GetUri(path);

            //// serverUri 应以 ftp:// 协议开头。
            如果 (serverUri.Scheme != Uri.UriSchemeFtp)
                返回 ””; 

            FtpWebRequest request = CreateFtpRequest(serverUri, WebRequestMethods.Ftp.ListDirectory);

            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream());
            string result = sr.ReadToEnd();
            Console.WriteLine("响应状态:{0} - {1}", response.StatusCode, response.StatusDescription + "\r\n" + result);

            返回结果;
        }

        private static FtpWebRequest CreateFtpRequest(Uri serverUri, string method)
        {
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(serverUri);
            request.EnableSsl = true;
            request.UsePassive = true;
            request.UseBinary = true;
            request.KeepAlive = true;
            request.Credentials = new NetworkCredential(username, password);
            请求.方法 = 方法;

            退货请求;
        }

        private static Uri GetUri(string remoteFilePath)
        {
            Uri ftpServerUri = new Uri("ftp://" + ftpServer);
            返回新的 Uri(ftpServerUri, remoteFilePath);
        }

    }
}
 

2016/5/10 19:01:04

  • ajayreigns
  • (1帖子)
主题: 我需要一段 VB.NET 代码来连接 PRO Drivehq 帐户
我需要一段 VB.NET 代码来连接 PRO Drivehq 帐户

请分享用于连接 PRO Drive 总部帐户的 Visual Basic .NET 代码


回复
2016/11/19 0:25:49

  • arsene16pcs017
  • (1帖子)
主题: 回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器
回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器

 您好!我设计了我的网站项目。请问如何将我的文件(文本、视频、音频)分享到云端,以便其他人可以访问?能否提供在DriveHQ上上传和下载文件的步骤和代码?谢谢


回复
2018/1/15 22:32:28

  • DriveHQSupport_
  • (676帖子)
主题: 回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器

用户: arsene16pcs017  -  2018/1/15 22:32:28

回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器

 您好!我设计了我的网站项目。请问如何将我的文件(文本、视频、音频)分享到云端,以便其他人可以访问?能否提供在DriveHQ上上传和下载文件的步骤和代码?谢谢

回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器

感谢您与我们联系。 

您应该可以在我们的服务手册中找到任何关于共享/发布的基本问题的答案: https://www.drivehq.com/ServiceManual.aspx. 如有任何具体问题,请发送电子邮件 support@drivehq.com 我们将尽力为您提供帮助。 

 

谢谢你,
DriveHQ 支持


 


回复
2018/1/16 8:32:57

  • glorber
  • (1帖子)
主题: 回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器
回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器

我正在使用 Swift 开发一个 iOS 应用。该应用会生成一个 JSON 数据文件,我希望能够分别将该文件从应用上传到 DriveHQ 以及从 DriveHQ 下载该文件。

能否分享一段用于连接 DriveHQ FTP 服务器的 Swift 代码示例?

谢谢。


回复
2018/9/22 6:59:05

  • stleojohn
  • (1帖子)
主题: 回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器
回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器

 我运行这段代码时遇到了未知异常错误,请帮帮我


回复
2019/11/26 20:42:14

  • DriveHQ Support
  • (32帖子)
主题: 回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器

用户: stleojohn  -  2019/11/26 20:42:14

回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器

 我运行这段代码时遇到了未知异常错误,请帮帮我

回复:FTP客户端示例代码(C#源代码):连接到DriveHQ的FTP服务器

请贴出您的代码片段和异常信息。另外,请在 FileZilla 上进行测试,以确保您的网络不会阻止 FTP 连接。


回复
2019/11/26 21:32:26

  • liveieee
  • (2帖子)
主题: Python FTP客户端程序
Python FTP客户端程序

请问您能否分享一下 DriveHQ 的 Python 版本


回复
2019/12/31 4:28:41

收藏并分享
快速回复

Leading Cloud Surveillance service

Leading Enterprise Cloud IT Service Since 2003