이전에 한번 클라이언트에서 서버로 파일을 업로드하고 이것을 외부 FTP 서버로 전송하는 글을 쓴적이 있다.
여기서 한가지 문제점이 있었다.
private bool UploadToFTP(HttpPostedFile fileToUpload)
{
try
{
string uploadUrl = @ftp://블라블라블라;
string uploadFileName = fileToUpload.FileName;
................
}
}
이런식으로 HttpPostedFile 파라미터를 이용 해서 클라이언트의 input file 태그에서 선택된 파일을 받아올 수 있다고
설명을 했다.
하지만 다중 File Upload일 경우 하나라도 파일을 선택을 하지 않을시 fileToUpload의 파라미터값이
null로 들어오는 문제점이 있었다.
이것을 해결 하기 위한 방법은 메소드 내부에 Request.Files를 사용하면 된다.
클라이언트에서 업로드한 파일의 컬렉션을 multipart MIME 형식으로 가져오게 되며,
모든 input file 태그에서 파일을 선택하지 않아도 잘 동작한다.
private bool UploadToFTP()
{
try
{
HttpFileCollectionBase files = Request.Files;
foreach (string file in files)
{
HttpPostedFileBase f = files[file] as HttpPostedFileBase;
................
}
}
}
여기서 이 두가지의 차이를 명심해야 한다.
첫번째 HttpPostedFileBase를 파라미터를 받을 경우
Client에서 Input file의 name이 모두 같아야 한다~ 이것에 서버 메소드의 Parameter 이름이 된다.!!
두번째 Request.Files를 이용할 경우
Client에서 Input file의 name이 같으면 안된다.!!