本文将介绍如何在FtpWebRequest之前检查FTP上是否存在文件的详细情况,特别是关于怎么检查ftp服务器连接端口的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,
本文将介绍如何在FtpWebRequest之前检查FTP上是否存在文件的详细情况,特别是关于怎么检查ftp服务器连接端口的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于.NET FtpWebRequest是否支持隐式(FTPS)和显式(FTPES)?、asp.net – HttpRequest,HttpWebRequest和WebRequest之间的区别、C# -- HttpWebRequest 和 HttpWebResponse 的使用、C# HttpWebRequest 传文件及参数的知识。
本文目录一览:- 如何在FtpWebRequest之前检查FTP上是否存在文件(怎么检查ftp服务器连接端口)
- .NET FtpWebRequest是否支持隐式(FTPS)和显式(FTPES)?
- asp.net – HttpRequest,HttpWebRequest和WebRequest之间的区别
- C# -- HttpWebRequest 和 HttpWebResponse 的使用
- C# HttpWebRequest 传文件及参数
如何在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)?
我被要求支持隐式和显式FTPS(也称为FTPES)。我们目前正在使用.NETFtpWebRequest
。是否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之间的区别
解决方法
WebRequest
是HttpWebRequest的抽象基类 – 您不能直接使用它。它是其他*请求类的基类(用于FTP,文件和其他类型的Web请求)。这些类都用于从Web获取资源(文件)。
还有一个WebClient
类 – 可能是使用所有用于从Internet检索资源的BCL类最简单的类。
另一方面,HttpRequest
表示ASP.NET应用程序中资源的请求 – 这是请求的服务器端。
主要的区别是HttpWebRequest是HTTP客户端,HttpRequest是在ASP.NET Web应用程序中使用的服务器端。
C# -- HttpWebRequest 和 HttpWebResponse 的使用
C# -- HttpWebRequest 和 HttpWebResponse 的使用
结合使用HttpWebRequest 和 HttpWebResponse,来判断一个网页地址是否可以正常访问。
1.举例
HttpWebRequest wreq </span>=<span> (HttpWebRequest)WebRequest.Create(strUrl);
HttpWebResponse wrsp </span>=<span> (HttpWebResponse)wreq.GetResponse();
</span><span>if</span> (wrsp.StatusCode ==<span> HttpStatusCode.OK)
{
Console.WriteLine(strUrl</span>+ <span>"</span><span> --http response正常\r\n</span><span>"</span><span>);
}
</span><span>else</span><span>
{
Console.WriteLine(strUrl </span>+ <span>"</span><span> --http response出现异常!\r\n</span><span>"</span><span>);
}
Console.ReadKey();
}
}</span></pre>
2. 运行结果:
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 传文件及参数的相关信息,请在本站寻找。
本文标签: