//指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
// 指定数据传输类型
reqFTP.UseBinary = true;
reqFTP.UsePassive = false;
// 上传文件时通知服务器文件的大小
reqFTP.ContentLength = fileInf.Length;
reqFTP.Timeout = 30000;
// 缓冲大小设置为2kb
int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;
FileStream fs = null;
Stream strm = null;
try
{
FileUtil.getInstance().backupLog(“111111111111111”, IniUtil.getInstance().b_debug);
// 打开一个文件流 (System.IO.FileStream) 去读上传的文件
fs = fileInf.OpenRead();
FileUtil.getInstance().backupLog(“22222222222”, IniUtil.getInstance().b_debug);
// 把上传的文件写入流
strm = reqFTP.GetRequestStream();
FileUtil.getInstance().backupLog(“3333333333333”, IniUtil.getInstance().b_debug);
// 每次读文件流的2kb
contentLen = fs.Read(buff, 0, buffLength);
FileUtil.getInstance().backupLog(“4444444444444444”, IniUtil.getInstance().b_debug);
// 流内容没有结束
while (contentLen != 0)
{
// 把内容从file stream 写入 upload stream
strm.Write(buff, 0, contentLen);
FileUtil.getInstance().backupLog(“555555555555555”, IniUtil.getInstance().b_debug);
contentLen = fs.Read(buff, 0, buffLength);
}
if (b_isFtpBackup)
{
FileUtil.instance.Log(filePath + “–上传成功!”);
}
else
{
if (MainForm.instance.bufferFTPBtn.Enabled)
{
FTPStateChange(“缓存文件上传中…”);
FileUtil.getInstance().backupLog(“缓存文件上传中…”);
BufferFTPChange(false);
}
}
}
catch (Exception ex)
{
if (ftpBufferUploadRuuning)
{
FTPStateChange(“FTP连接失败!”);
FileUtil.getInstance().backupLog(“FTP连接失败!”);
BufferFTPChange(true);
}
b_ftpRet = false;
if (b_isFtpBackup)
{
FileUtil.instance.Log(filePath + “–上传失败!”);
}
FileUtil.instance.backupLog("Ftphelper Upload Error --> " + ex.Message);
if (IniUtil.getInstance().isBackup.Equals(“1”) && b_isFtpBackup)
{
FileUtil.getInstance().WriteFile(FileUtil.getInstance().ftpBufferPath + “\” + fileName, fileContent, null, FileMode.Create);
}
}
finally
{
// 关闭两个流
try
{
if (strm != null)
{
strm.Close();
}
}
catch (Exception e)
{
FileUtil.instance.backupLog(“strm.Close() exception,” + e.Message);
}
try
{
if (fs != null)
{
fs.Close();
}
}
catch (Exception e)
{
FileUtil.instance.backupLog(“fs.Close() exception,” + e.Message);
}
}
}
return b_ftpRet;
}
}
2、检测FTP是否可用代码
public Boolean CheckFtp()
{
Boolean ret = true;
try {
FileUtil.getInstance().Log(“checkftp start,” + ftpURI);
FtpWebRequest reqFTP;
// 根据uri创建FtpWebRequest对象
FileUtil.getInstance().Log(“根据uri创建FtpWebRequest对象…”);
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
FileUtil.getInstance().Log(“获取ListDirectory…”);
reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
FileUtil.getInstance().Log(“userID,password登录…”);
reqFTP.UseBinary = true;
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
FileUtil.getInstance().Log(“登录后等待response…”);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
FileUtil.getInstance().Log(“获取response成功,ftp连接成功!”);
} catch (Exception e) {
if(!b_ftpRet){
FileUtil.instance.Log(“CheckFtp Exception:” + e.Message);
}
ret = false;
}
return ret;
}
测试FTP连接居然用了10秒,而我的FTPtimeout设置的是2秒,故失败,但是为什么这么慢呢?
3、FTP工具测试
=======================================================
二、原因分析
======
1、FtpWebRequest.KeepAlive
线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识
一线互联网P7面试集锦+各种大厂面试集锦
学习笔记以及面试真题解析
0200717112614594.png)
1、FtpWebRequest.KeepAlive
线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识
[外链图片转存中…(img-xdD1ncQi-1721134002237)]
一线互联网P7面试集锦+各种大厂面试集锦
[外链图片转存中…(img-gqGlySj5-1721134002238)]
学习笔记以及面试真题解析
[外链图片转存中…(img-O9BmN7mS-1721134002238)]