for (int i = startIndex; i <= page; i++)
{
MakeDirectory("ftp://ftp.ftp주소/"); //경로 검사 후 경로 생성
Thread.Sleep(int.Parse(TimeSpan.FromSeconds(2).TotalMilliseconds.ToString())); //2초 쉬기
imageDt;
Parallel.ForEach(imageDt.AsEnumerable(), row => //병렬로 처리
{
string extension = Path.GetExtension(url); //이미지 확장자 구하기(.jpg나 .png)
string 업로드할이미지경로= string.Empty;//업로드될 ftp경로 및 이름
string 원본이미지url= string.Empty;//업로드할 url(이미지링크)
업로드할이미지경로= "" + extension;
result = UploadFileList(원본이미지url, 업로드할이미지경로);
results.Add(result);
});
}
// 업로드 함수
private UploadImageResult UploadFileList(string imageUrl, string ftpPath)
{
string returnUrl = "https://ftp주소/";
returnUrl = returnUrl + ftpPath;//업로드되고 업로드 된 ftp의 경로
try
{
string ftpUrl = string.Empty;
ftpUrl = "ftp://ftp.ftp주소/" + ftpPath;
FtpWebRequest req = Connect(ftpUrl);
byte[] buffer = new byte[0];
buffer = 이미지 바이트;
using (var ftpStream = req.GetRequestStream())
{
ftpStream.Write(buffer, 0, buffer.Length);
}
// 응답 표시
using (var resp = (FtpWebResponse)req.GetResponse())
{
if (resp.StatusCode == FtpStatusCode.ClosingData)//성공
{
}
else
{
throw new Exception("FTP 업로드 실패");
}
}
return result;
}
catch(Exception ex)
{
}
return result ;
}
//FTP연결 함수
private FtpWebRequest Connect(string ftpUrl)
{
FtpWebRequest req = (FtpWebRequest)WebRequest.Create(ftpUrl);
req.KeepAlive = true;
req.Method = WebRequestMethods.Ftp.UploadFile;
req.Credentials = new NetworkCredential("ftp아이디", "ftp비밀번호");
req.UsePassive = true;
return req;
}
//경로검사 후 경로없으면 디렉터리 생성
private void MakeDirectory(string directory)
{
FtpWebRequest req = Connect(directory);
req.Method = WebRequestMethods.Ftp.ListDirectory;
try
{
using (var result = (FtpWebResponse)req.GetResponse())
{
return;
}
}
catch
{
req = Connect(directory);
req.Method = WebRequestMethods.Ftp.MakeDirectory;
using (var resp = (FtpWebResponse)req.GetResponse())
{
Console.WriteLine(resp.StatusCode);
}
}
}