GVKun编程网logo

如何在FtpWebRequest之前检查FTP上是否存在文件(怎么检查ftp服务器连接端口)

6

本文将介绍如何在FtpWebRequest之前检查FTP上是否存在文件的详细情况,特别是关于怎么检查ftp服务器连接端口的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,

本文将介绍如何在FtpWebRequest之前检查FTP上是否存在文件的详细情况,特别是关于怎么检查ftp服务器连接端口的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于.NET FtpWebRequest是否支持隐式(FTPS)和显式(FTPES)?、asp.net – HttpRequest,HttpWebRequest和WebRequest之间的区别、C# -- HttpWebRequest 和 HttpWebResponse 的使用、C# HttpWebRequest 传文件及参数的知识。

本文目录一览:

如何在FtpWebRequest之前检查FTP上是否存在文件(怎么检查ftp服务器连接端口)

如何在FtpWebRequest之前检查FTP上是否存在文件(怎么检查ftp服务器连接端口)

我需要使用FtpWebRequest将文件放在FTP目录中。上传之前,我首先想知道此文件是否存在。

我应使用什么方法或属性来检查此文件是否存在?

答案1

小编典典
var request = (FtpWebRequest)WebRequest.Create    ("ftp://ftp.domain.com/doesntexist.txt");request.Credentials = new NetworkCredential("user", "pass");request.Method = WebRequestMethods.Ftp.GetFileSize;try{    FtpWebResponse response = (FtpWebResponse)request.GetResponse();}catch (WebException ex){    FtpWebResponse response = (FtpWebResponse)ex.Response;    if (response.StatusCode ==        FtpStatusCode.ActionNotTakenFileUnavailable)    {        //Does not exist    }}

通常,在这样的代码中使用Exceptions功能是个坏主意,但是在这种情况下,我认为实用主义是一个胜利。与以这种方式使用异常相比,目录上的呼叫列表可能会导致FAR效率低下。

如果不是,请注意这不是一个好习惯!

编辑:“它对我有用!”

这似乎适用于大多数ftp服务器,但不是全部。某些服务器要求发送“ TYPE I”,然后SIZE命令才能起作用。有人认为应该按以下方式解决问题:

request.UseBinary = true;

不幸的是,这是一个设计限制(很大的错误!),除非FtpWebRequest正在下载或上传文件,否则它将不会发送“ TYPE
I”。请参阅此处的讨论和Microsoft的响应。

我建议改用以下WebRequestMethod,这对我测试过的所有服务器都有效,即使那些不会返回文件大小的服务器也是如此。

WebRequestMethods.Ftp.GetDateTimestamp

.NET FtpWebRequest是否支持隐式(FTPS)和显式(FTPES)?

.NET FtpWebRequest是否支持隐式(FTPS)和显式(FTPES)?

我被要求支持隐式和显式FTPS(也称为FTPES)。我们目前正在使用.NET
FtpWebRequest。是否FtpWebRequest支持两种类型的FTPES,有什么区别?

谢谢

答案1

小编典典

据我所知,当前(.NET 2.0和3.5)的FtpWebRequest版本仅支持显式SSL。

实际上,.NET 2.0当前不支持隐式SSL,仅支持显式。我们将考虑在以后的版本中添加它。

JonCole- MSDN论坛上的
MSFTModerator

如果需要同时使用隐式和显式TLS / SSL,则必须尝试使用​​第三方FTP / SSL组件之一。以下代码使用了我们的Rebex FTP /
SSL,摘自教程页。

显式TLS / SSL

客户端以通常的非保护方式连接到FTP服务器,通常将端口21分配给FTP协议。当需要使用SSL保护连接时,将初始化SSL协商,确保控制连接的安全,并保护所有后续通信。

// Create an instance of the Ftp class. Ftp ftp = new Ftp();// Connect securely using explicit SSL. // Use the third argument to specify additional SSL parameters. ftp.Connect(hostname, 21, null, FtpSecurity.Explicit);// Connection is protected now, we can log in safely. ftp.Login(username, password);

显式保护意味着可以随时保护连接。如果您不知道在连接时是否不需要保护,则可能要使用普通的未加密FTP协议进行连接,然后再保护连接。

Ftp ftp = new Ftp();// Connect to the server with no protection. ftp.Connect(hostname, 21);// Upgrade connection to SSL. // This method also accepts an argument to specify SSL parameters. ftp.Secure();// Connection is protected now, we can log in safely. ftp.Login(username, password);

FTP会话的隐式SSL保护

FTPS协议最初是由IANA分配的。连接到该端口后,将立即开始SSL协商,并确保控制连接的安全。所有数据连接也以相同的方式隐式地得到保护。这类似于HTTPS使用的方法。

IETF不赞成使用此方法,不建议使用。Rebex FTP / SSL支持与旧服务器进行互操作,但是强烈建议尽可能使用显式保护。

Ftp ftp = new Ftp();// Connect securely using implicit SSL. // Use the third argument to specify additional SSL parameters. ftp.Connect(hostname, 990, null, FtpSecurity.Implicit);// Connection is protected now, we can log in safely. ftp.Login(username, password);

您可以从rebex.net/ftp-ssl.net/下载该组件。

asp.net – HttpRequest,HttpWebRequest和WebRequest之间的区别

asp.net – HttpRequest,HttpWebRequest和WebRequest之间的区别

我想知道有没有人解释上市的差异

解决方法

他们做不同的事情

WebRequest是HttpWebRequest的抽象基类 – 您不能直接使用它。它是其他*请求类的基类(用于FTP,文件和其他类型的Web请求)。这些类都用于从Web获取资源(文件)。

还有一个WebClient类 – 可能是使用所有用于从Internet检索资源的BCL类最简单的类。

另一方面,HttpRequest表示ASP.NET应用程序中资源的请求 – 这是请求的服务器端。

主要的区别是HttpWebRequest是HTTP客户端,HttpRequest是在ASP.NET Web应用程序中使用的服务器端。

C# -- HttpWebRequest 和 HttpWebResponse 的使用

C# -- HttpWebRequest 和 HttpWebResponse 的使用

C# -- HttpWebRequest 和 HttpWebResponse 的使用

结合使用HttpWebRequest 和 HttpWebResponse,来判断一个网页地址是否可以正常访问。

1.举例

Main( strUrl = HttpWebRequest wreq </span>=<span&gt; (HttpWebRequest)WebRequest.Create(strUrl); HttpWebResponse wrsp </span>=<span&gt; (HttpWebResponse)wreq.GetResponse(); </span><span&gt;if</span> (wrsp.StatusCode ==<span&gt; HttpStatusCode.OK) { Console.WriteLine(strUrl</span>+ <span&gt;"</span><span&gt; --http response正常\r\n</span><span&gt;"</span><span&gt;); } </span><span&gt;else</span><span&gt; { Console.WriteLine(strUrl </span>+ <span&gt;"</span><span&gt; --http response出现异常!\r\n</span><span&gt;"</span><span&gt;); } Console.ReadKey(); } }</span></pre>

2. 运行结果:

C# HttpWebRequest 传文件及参数

C# HttpWebRequest 传文件及参数

C# 后台调用api 传文件及参数,记录下也是网上找的,用起来没问题,接口端用的是Java

public static string webPost(string apiurl,string fpath, string classCode,  int code, string time)
        {
            NameValueCollection poststring = new NameValueCollection();
          
            poststring["classCode"] = classCode;           
            poststring["code"] = code.ToString();
            poststring["recordTime"] = time;
            string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
            byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
            byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");

            //1.HttpWebRequest
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiurl);
            request.ContentType = "multipart/form-data; boundary=" + boundary;
            request.Method = "POST";
            request.KeepAlive = true;
            request.Credentials = CredentialCache.DefaultCredentials;

            using (Stream stream = request.GetRequestStream())
            {
                //1.1 key/value
                string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
                if (poststring != null)
                {
                    foreach (string key in poststring.Keys)
                    {
                        stream.Write(boundarybytes, 0, boundarybytes.Length);
                        string formitem = string.Format(formdataTemplate, key, poststring[key]);
                        byte[] formitembytes = Encoding.GetEncoding("UTF-8").GetBytes(formitem);
                        stream.Write(formitembytes, 0, formitembytes.Length);
                    }
                }

                //1.2 file
                string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n";
                byte[] buffer = new byte[4096];
                int bytesRead = 0;

                stream.Write(boundarybytes, 0, boundarybytes.Length);
                string header = string.Format(headerTemplate, "vFile", Path.GetFileName(fpath));
                byte[] headerbytes = Encoding.GetEncoding("UTF-8").GetBytes(header);
                stream.Write(headerbytes, 0, headerbytes.Length);
                using (FileStream fileStream = new FileStream(fpath, FileMode.Open, FileAccess.Read))
                {
                    while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                    {
                        stream.Write(buffer, 0, bytesRead);
                    }
                }

                //1.3 form end
                stream.Write(endbytes, 0, endbytes.Length);
            }
            //2.WebResponse
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            using (StreamReader stream = new StreamReader(response.GetResponseStream()))
            {
                return stream.ReadToEnd();
            }
        }
    }

 

 

Java 接收

@RequestMapping(value = "/uploadSliceVideoFromScreen")
    public ResultBean uploadSliceVideoFromScreen(@RequestParam(value="vFile")MultipartFile vFile,
                                                  String classCode, String code, String recordTime, HttpServletResponse response){
        response.setHeader("Access-Control-Allow-Origin", "*");
        try {
           
            TODO something........
            response.setStatus(200);
            return ResultBean.success();
        } catch (Exception e) {
            e.printStackTrace();
            response.setStatus(500);
            return ResultBean.failMessage("上传失败,请重试");
        }
    }

  

关于如何在FtpWebRequest之前检查FTP上是否存在文件怎么检查ftp服务器连接端口的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于.NET FtpWebRequest是否支持隐式(FTPS)和显式(FTPES)?、asp.net – HttpRequest,HttpWebRequest和WebRequest之间的区别、C# -- HttpWebRequest 和 HttpWebResponse 的使用、C# HttpWebRequest 传文件及参数的相关信息,请在本站寻找。

本文标签:

上一篇禁用WebBrowser控件中的JavaScript错误(禁用webdav服务后果)

下一篇简单注入器无法注入Web API控制器中的依赖项(简单注入器无法注入web api控制器中的依赖项怎么办)