FTP프로토콜을 이용해서 이미지 파일전송하는 방법에 대해 알아보겠습니다. 이미지파일의 경우 바이너리 데이터로 전송해야합니다. FTPWebRequest Class를 이용하여 FTP서버에 접속해서 업로드,다운로드를 진행합니다.
아래 예제는 업로드이미지 파일을 버튼을 클릭하면 FTP서버로 지정된이미지파일 업로드하고, 다운로드이미지파일을 하면 FTP서버에 접속해서 파일을 다운로드 하게 되어있습니다.
첨부파일 : FTP이미지파일 업로드 전체소스
1. 메인화면
- Form1.cs : testimage.png파일을 FTP서버로 전송하는부분과, FTP서버의 testimage.png파일을 testimage_download.png파일로 다운로드 하도록 되어있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
namespace FTP
{
public partial class Form1 : Form
{
string _ftpID = "user";
string _ftpPassword = "1234";
string _ftpServer = "127.0.0.1";
string _uploadFilePath = "testimage.png";
string _downloadFilePath = "testimage_download.png";
public Form1()
{
InitializeComponent();
}
private void btnUpLoad_Click(object sender, EventArgs e)
{
FTPClient ftpClient = new FTPClient(_ftpServer,_ftpID,_ftpPassword);
ftpClient.UpLoad(_uploadFilePath, _uploadFilePath);
picUpLoad.Load(string.Format(@"{0}",_uploadFilePath));
picUpLoad.SizeMode = PictureBoxSizeMode.StretchImage;
}
private void btnDownLoad_Click(object sender, EventArgs e)
{
FTPClient ftpClient = new FTPClient(_ftpServer, _ftpID, _ftpPassword);
ftpClient.DownLoad(_uploadFilePath, _downloadFilePath);
picDownLoad.Load(string.Format(@"{0}", _uploadFilePath));
picDownLoad.SizeMode = PictureBoxSizeMode.StretchImage;
}
}
}
|
2. 이미지파일 업로드
- FTPWebRequest 클래스를 이용해서 FTP서버로 파일 업로드를 합니다. WebRequestMethods Class를 살펴보면 FTP명령어들이 const로 정의과 되어있고 업로드 하기위해서는 UploadFile을 사용합니다. 이미지를 전송하기위해서는 이진데이터로 전송해야되므로 BinaryReader클래스를 사용해서 업로드하는 파일값을 읽어서 FTP서버로 업로드합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
// 파일업로드
public void UpLoad(string filePath, string uploadPath)
{
//FTP다운로드관련 URL, Method설정(UploadFile)
string uri = string.Format("ftp://{0}/{1}", _serverIP, uploadPath);
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(_id, _password);
//파일정보를 Byte로열기
byte[] fileContents = null;
using (BinaryReader br = new BinaryReader(File.Open(filePath, FileMode.Open)))
{
long dataLength = br.BaseStream.Length;
fileContents = new byte[br.BaseStream.Length];
fileContents = br.ReadBytes((int) br.BaseStream.Length);
}
//FTP서버에 파일전송처리
request.ContentLength = fileContents.LongLength;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(fileContents, 0, fileContents.Length);
}
//FTP전송결과확인
using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
{
Console.WriteLine($"Upload File Complete, status {response.StatusDescription}");
}
}
|
3. 이미지파일 다운로드
- FTP서버에 있는 파일을 다운로드 하기 위해서는 Method값을 DownloadFile로 지정하면됩니다. GetResponse()메소드를 이용해서 파일다운로드를 요청후에 받은 Stream정보를 BinaryReader Class를 사용해서 읽은 후 BinaryWriter를 이용해서 testimage_download.png에 저장합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
// 파일다운로드
public void DownLoad(string downloadPath, string saveFilePath)
{
//FTP다운로드관련 URL, Method설정(DownloadFile)
string uri = string.Format("ftp://{0}/{1}", _serverIP, downloadPath);
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(uri);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(_id, _password);
//FTP서버에 파일다운로드요청
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
int fileContentsLength = 4096;
byte[] fileContents = new byte[fileContentsLength];
Stream stream = new FileStream(saveFilePath, FileMode.Create);
//이진데이터로쓰기
using (BinaryWriter bw = new BinaryWriter (stream))
{
using (BinaryReader br = new BinaryReader(responseStream))
{
fileContentsLength = br.Read(fileContents, 0, fileContentsLength);
while (fileContentsLength > 0)
{
fileContentsLength = br.Read(fileContents, 0, fileContentsLength);
bw.Write(fileContents);
fileContents = new byte[fileContentsLength];
}
}
}
}
|
참고) https://docs.microsoft.com/ko-kr/dotnet/framework/network-programming/how-to-upload-files-with-ftp
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 비트연산 (AND,OR,XOR,NOT,SHIFT) (0) | 2022.02.21 |
---|---|
[C#] 2진수,8진수,10진수,16진수로 출력하기 (0) | 2022.02.20 |
[C#] 바이너리데이터 파일읽기/쓰기 (BinaryReader/Writer) (0) | 2021.11.18 |
[C#] 빌드시 이미지파일 포함하기 (0) | 2021.09.15 |
[C#] Null문자열제거 string.Replace("\0", string.Empty) (1) | 2021.09.13 |