ASP.NET에서 원격 서버에서 파일을 다운로드 및 업로드 하는 방법



이 문서의 영문 버전 보기:2512241

소개


이 문서를 다운로드할 수는 하나로 모든 프레임 워크 샘플을 설명 합니다. 이 코드 샘플 ASP.NET에서 로컬 또는 원격 서버에서 파일을 다운로드 및 업로드 하는 방법을 보여 줍니다. 다음의 다운로드 아이콘에서 샘플 패키지를 다운로드할 수 있습니다. 샘플 패키지의 C# 및 Visual Basic.NET 언어 버전을 사용할 수 있습니다.

이 코드 샘플을 업로드 하 고 사용자의 요청 도메인의 범위에 있지 않은 서버에서 파일을 다운로드 하는 방법을 보여 줍니다. HTTP 및 FTP 프로토콜을 사용 하 여 파일 전송 기능을 제공 합니다. 또한이 코드 예제에서는 동일한 리소스 식별자 (Uri) 서버에 있는 파일의 위치를 식별 이 코드 예제에 사용 되는 핵심 클래스는 WebClient 클래스 및 WebRequest 클래스입니다.

난이도 수준

다운로드 정보

이 코드 샘플을 다운로드 하려면 다음 링크 중 하나를 클릭 합니다.

기술 개요

ASP.NET에서 원격 서버에서 파일을 다운로드 및 업로드 매우 쉽습니다. .NET Framework 클래스 라이브러리는 몇 가지 간단한 요청 개체를 제공합니다. WebClient 클래스는 상위 클래스 서버 상호 작용을 쉽게 하는. WebRequest 개체 요청을 WebClient 클래스에 의해 사용 됩니다. HttpWebRequestFtpWebRequest 클래스는 추상 WebRequest 클래스의 특정 프로토콜 구현입니다. HttpWebRequest 업로드 하 고 파일을 다운로드 하는 HTTP 프로토콜의 GET 및 POST 메서드를 구현 합니다. FtpWebRequest 업로드 및 다운로드 파일을 FTP 프로토콜의 STOR 및 RETR 메서드를 구현 합니다.

다음 코드 예제에서는 WebClient클래스의 UploadDataDownloadData 메서드 URI는 원격 서버에서 데이터를 전송HTTP 프로토콜 PUT 메서드를 사용 하 여UploadData메서드를 사용 하 고 "응용 프로그램/x-www-양식-urlencoded" 인터넷 미디어 입력 합니다. DownloadData 메서드 FileStream 개체를 사용 하 여 들어오는 데이터 스트림을 저장 하 고 바이트 배열을 로컬 파일에 쓰는 데 사용 됩니다.

샘플 개요

이 샘플 코드에서는 다음과 같은 두 가지 새 클래스를 사용 하는 방법에 설명 하는 RemoteFileForm.aspx 파일을 찾을 수 있습니다.
  • RemoteUpload
  • RemoteDownload

RemoteUpload 클래스

RemoteUpload 클래스를는 두 개의 하위 클래스입니다. 이 클래스는 HttpRemoteUploadFtpRemoteUpload. 두 클래스 모두 RemoteUpload 생성자를 사용 합니다. RemoteUpload 클래스에는 서버 URI 파일 데이터의 바이트 배열을 이어야합니다. 업로드 된 파일의 이름을 지정할 수도 있습니다. FtpRemoteUpload 클래스 FtpWebRequest 직접 (대신 상위 WebClient 클래스를 사용 하 여) 사용 하 여 FTP 프로토콜의 특정 요구 사항을 처리할 수 있습니다.

RemoteUpload 클래스에 대 한 자세한 내용은 다음 클래스 정의 참조 하십시오.
public class HttpRemoteUpload : RemoteUpload
{
public HttpRemoteUpload(byte[] fileData, string fileNamePath, string urlString)
: base(fileData, fileNamePath, urlString)
{

}

public override bool UploadFile()
{
byte[] postData;
try
{
postData = this.FileData;
using (WebClient client = new WebClient())
{
client.Credentials = CredentialCache.DefaultCredentials;
client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
client.UploadData(this.UrlString, "PUT", postData);
}

return true;
}
catch (Exception ex)
{
throw new Exception("Failed to upload", ex.InnerException);
}

}
}

public class FtpRemoteUpload : RemoteUpload
{
public FtpRemoteUpload(byte[] fileData, string fileNamePath, string urlString)
: base(fileData, fileNamePath, urlString)
{

}

public override bool UploadFile()
{
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(this.UrlString);
reqFTP.KeepAlive = true;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.ContentLength = this.FileData.Length;

int buffLength = 2048;
byte[] buff = new byte[buffLength];
MemoryStream ms = new MemoryStream(this.FileData);

try
{
int contenctLength;
using (Stream strm = reqFTP.GetRequestStream())
{
contenctLength = ms.Read(buff, 0, buffLength);
while (contenctLength > 0)
{
strm.Write(buff, 0, contenctLength);
contenctLength = ms.Read(buff, 0, buffLength);
}
}

return true;
}
catch (Exception ex)
{
throw new Exception("Failed to upload", ex.InnerException);
}
}

}
RemoteFileForm.cs 파일에서 업로드 단추를 클릭 하면 RemoteUpload 개체의 인스턴스가 만들어집니다. 서버 URI를 전달 및 개체를 만드는 매개 변수로 로컬 실제 파일 경로입니다.

참고 서버에 파일을 저장 하는 데 파일 이름을 지정 하지 않으면 시스템 파일 이름을 현재 날짜 및 시간 서버에 따라 자동으로 생성 됩니다. 날짜 및 시간 밀리초입니다. UploadData 메서드를 완료 한 후 현재 페이지에 결과가 표시 됩니다.

RemoteDownload 클래스

RemoteDownload 클래스는 두 개의 하위 클래스에 있습니다. 이 클래스는 HttpRemoteDownloadFtpRemoteDownload. RemoteDownload 클래스는 URI 리소스와 로컬 실제 디렉터리가 필요합니다. RemoteDownload 클래스는 시작 URI 리소스 다운로드 하기 전에 있는지 확인 하려면 확인 합니다. 클래스는 서버에서 응답 데이터를 포함 하 고 FileStream이 바이트 배열을 쓴 다음 스트림을 검색 합니다. FtpRemoteDownload 클래스 FtpWebRequest 직접 (대신 상위 WebClient 클래스를 사용 하 여) 사용 하 여 FTP 프로토콜의 특정 요구 사항을 처리할 수 있습니다.

RemoteDownload 클래스에 대 한 자세한 내용은 다음 클래스 정의 참조 하십시오.
 public class HttpRemoteDownload : RemoteDownload
{
public HttpRemoteDownload(string urlString, string descFilePath)
: base(urlString, descFilePath)
{

}

public override bool DownloadFile()
{
string fileName = System.IO.Path.GetFileName(this.UrlString);
string descFilePathAndName =
System.IO.Path.Combine(this.DescFilePath, fileName);
try
{
WebRequest myre = WebRequest.Create(this.UrlString);
}
catch
{
return false;
}
try
{
byte[] fileData;
using (WebClient client = new WebClient())
{
fileData = client.DownloadData(this.UrlString);
}
using (FileStream fs =
new FileStream(descFilePathAndName, FileMode.OpenOrCreate))
{
fs.Write(fileData, 0, fileData.Length);
}
return true;
}
catch (Exception ex)
{
throw new Exception("download field", ex.InnerException);
}
}
}

public class FtpRemoteDownload : RemoteDownload
{
public FtpRemoteDownload(string urlString, string descFilePath)
: base(urlString, descFilePath)
{

}

public override bool DownloadFile()
{
FtpWebRequest reqFTP;

string fileName = System.IO.Path.GetFileName(this.UrlString);
string descFilePathAndName =
System.IO.Path.Combine(this.DescFilePath, fileName);

try
{

reqFTP = (FtpWebRequest)FtpWebRequest.Create(this.UrlString);
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;


using (FileStream outputStream = new FileStream(descFilePathAndName, FileMode.OpenOrCreate))
using (FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse())
using (Stream ftpStream = response.GetResponseStream())
{
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);
}
}
return true;
}

catch (Exception ex)
{
throw new Exception("upload failed", ex.InnerException);
}
}
}

참고 만들고 샘플 응용 프로그램을 배포 하는 방법에 대 한 자세한 내용은 다운로드 패키지에 포함 되어 있는 Readme.txt 파일을 참조 하십시오.

언어

이 코드 샘플은 다음과 같은 프로그래밍 언어에서 사용할 수 있습니다.
언어프로젝트 이름
C#CSRemoteUploadAndDownload
Visual Basic.NETVRemoteUploadAndDownload

기술 범주

  • ASP.NET 2.0
  • ASP.NET 3.5
  • ASP.NET 4.0

참조

WebClient 클래스에 대 한 자세한 내용은 다음 Microsoft 개발자 (MSDN) 웹 사이트를 방문 하십시오.UploadData 메서드에 대 한 자세한 내용은 다음 MSDN 웹 사이트를 방문 하십시오.DonwloadData 메서드에 대 한 자세한 내용은 다음 MSDN 웹 사이트를 방문 하십시오.FtpWebRequest 메서드에 대 한 자세한 내용은 다음 MSDN 웹 사이트를 방문 하십시오.FTP 통해 파일을 업로드 하는 방법에 대 한 자세한 내용은 다음 MSDN 웹 사이트를 방문 하십시오.

추가 정보


하나로 모든 코드 프레임 워크 무엇입니까?

하나로 모든 코드 프레임 워크 다른 프로그래밍 언어에서 코드 샘플을 사용 하 여 대부분의 Microsoft 개발 기술을 보여 줍니다. 각 예제에서는 신중 하 게 선택, 구성, 이며 하나의 공통 코드 시나리오를 표시할 문서화 된. 하나로 모든 코드 프레임 워크에 대 한 자세한 내용은 다음 Microsoft 웹 사이트를 방문 하십시오.

자세한 하나로 모든 프레임 워크 코드 샘플을 찾는 방법

자세한 하나로 모든 프레임 워크 코드 샘플을 찾으려면 "kbcodefx"는 Microsoft에서 관련된 키워드와 함께 검색 웹 사이트를 지원 합니다. 또는 다음 Microsoft 웹 사이트를 방문 하십시오.
신속한 게시 부인
마이크로소프트 및/또는 그 공급자 적합성, 신뢰성, 또는 정보 및 여기에 포함 된 관련 된 그래픽 정확성에 대 한 없는 표현을 확인 합니다. 이러한 모든 정보 및 관련 된 그래픽 어떤 종류의 보증 없이 "있는 그대로"를 제공 됩니다. Microsoft 및/또는 그 각 공급자 모든 보증 및 조건을이 정보 및 관련 된 그래픽, 모든 묵시적된 보증을 포함 하 여 상품성, 특정 목적, 시장성, 제목 및 비침해를 적합성 조건을 부인 거 합니다. 특히 동의 하는 경우에 Microsoft 및/또는 그 공급자 책임을 지지 어떠한 직접, 간접, 인과 응 보, 부수적, 특별, 파생적 손해 또는 모든 손해에 대 한 포함 하 제한 없이 사용, 데이터 또는 이익 손실로 인 한 부족 또는 사용 또는 정보 및 관련된 그래픽에 포함 된 여기에 사용할 수 없음으로와 연결 어떤 식으로든에서 발생 하는에 따라 계약, 불법행위, 과실, 엄격 책임 또는 Microsoft 또는 그 공급자가 손해의 가능성에 대해 충고 한 경우에 다른 것인지.