112 lines
4.7 KiB
C#
112 lines
4.7 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Net;
|
|
|
|
|
|
namespace WX.CRM.Common
|
|
{
|
|
public class FtpHelper
|
|
{
|
|
|
|
/// <summary>
|
|
/// ftp方式上传
|
|
/// </summary>
|
|
public static bool UploadFtp(string filePath, string filename, string ftpServerIP, string ftpUserID, string ftpPassword)
|
|
{
|
|
FileInfo fileInf = new FileInfo(filePath + "\\" + filename);
|
|
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
|
|
FtpWebRequest reqFTP;
|
|
// Create FtpWebRequest object from the Uri provided
|
|
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));
|
|
try
|
|
{
|
|
// Provide the WebPermission Credintials
|
|
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
|
|
// By default KeepAlive is true, where the control connection is not closed
|
|
// after a command is executed.
|
|
reqFTP.KeepAlive = false;
|
|
// Specify the command to be executed.
|
|
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
|
|
// Specify the data transfer type.
|
|
reqFTP.UseBinary = true;
|
|
// Notify the server about the size of the uploaded file
|
|
reqFTP.ContentLength = fileInf.Length;
|
|
// The buffer size is set to 2kb
|
|
int buffLength = 2048;
|
|
byte[] buff = new byte[buffLength];
|
|
int contentLen;
|
|
// Opens a file stream (System.IO.FileStream) to read the file to be uploaded
|
|
//FileStream fs = fileInf.OpenRead();
|
|
FileStream fs = fileInf.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
|
// Stream to which the file to be upload is written
|
|
Stream strm = reqFTP.GetRequestStream();
|
|
// Read from the file stream 2kb at a time
|
|
contentLen = fs.Read(buff, 0, buffLength);
|
|
// Till Stream content ends
|
|
while (contentLen != 0)
|
|
{
|
|
// Write Content from the file stream to the FTP Upload Stream
|
|
strm.Write(buff, 0, contentLen);
|
|
contentLen = fs.Read(buff, 0, buffLength);
|
|
}
|
|
// Close the file stream and the Request Stream
|
|
strm.Close();
|
|
fs.Close();
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
reqFTP.Abort();
|
|
LogHelper.Error(ex.ToString());
|
|
return false;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// ftp方式下载
|
|
/// </summary>
|
|
public static bool DownloadFtp(string filePath, string fileName, string ftpServerIP, string ftpUserID, string ftpPassword)
|
|
{
|
|
FtpWebRequest reqFTP;
|
|
FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
|
|
Stream ftpStream = null;
|
|
try
|
|
{
|
|
|
|
//filePath = < <The full path where the file is to be created.>>,
|
|
//fileName = < <Name of the file to be created(Need not be the name of the file on FTP server).>>
|
|
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName));
|
|
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
|
|
reqFTP.UseBinary = true;
|
|
reqFTP.KeepAlive = false;
|
|
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
|
|
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
|
|
ftpStream = response.GetResponseStream();
|
|
long cl = response.ContentLength;
|
|
int bufferSize = 2048;
|
|
int readCount;
|
|
byte[] buffer = new byte[bufferSize];
|
|
readCount = ftpStream.Read(buffer, 0, bufferSize);
|
|
while (readCount > 0)
|
|
{
|
|
outputStream.Write(buffer, 0, readCount);
|
|
readCount = ftpStream.Read(buffer, 0, bufferSize);
|
|
}
|
|
|
|
outputStream.Close();
|
|
response.Close();
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogHelper.Error("FTP下载文件出现错误" + "ftp://" + ftpServerIP + "/" + fileName + ":" + ex.ToString());
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
outputStream.Dispose();
|
|
if (ftpStream != null)
|
|
ftpStream.Close();
|
|
}
|
|
}
|
|
}
|
|
} |