asp.net 대용량 파일 다운로드

본질적으로 DownloadHandler.dll은 그림 1과 같이 독립 실행 형 클라이언트 (FileDownloader.exe)의 간단한 URL을 사용하여 병렬로 파일을 청크로 다운로드 할 수있는 다중 스레드 파일 다운로더로 기존 IIS 웹 서버를 변환합니다. 매개 변수(chunksize=5242880)는 선택 사항이며 포함되지 않은 경우 기본적으로 전체 파일을 하나의 청크로 다운로드할 수 있습니다. 그림 2와 그림 3은 대부분의 다른 파일 다운로드 소프트웨어와 마찬가지로 처음부터 전체 다운로드를 완전히 다시 시작하지 않고도 파일의 실패한 부분만 반복적으로 다시 시도할 수 있는 방법을 보여 줍니다. 그림 1 다운로드 Handlerhandler.dll에 대한 처리 흐름의 높은 수준의 디자인 개요 (FileDownloader.exe 클라이언트로 FileDownloader.exe를 사용하여) 내가 쓴 코드는 WebForms에서 잘 작동하지만 나는 그것이 작은 파일에 대해 잘 작동 생각합니다 (나는 1 gb 크기의 파일을 테스트하고 잘 작동, 실제로 는 모든 크기에 대해 작동 생각하지만, 서버 B에서 서버 A로 다운로드한 다음 사용자 컴퓨터로 다운로드하기 때문에 다운로드하는 데 시간이 오래 걸립니다). 어쨌든 DotNet 코어에는 이와 같은 코드가 필요합니다. 나는 사용자가 등록하고 다운로드 를 지불 할 수있는 다운로드 사이트가 있습니다 (사용자는 구독료를 지불하고 파일을 다운로드해야합니다). Windows Server 2016이 있는 새 Azure VM에서 IIS 10.0.14393.0과 동일한 문제가 발생했습니다. 크롬을 사용하여 서버에서 상당히 큰 파일 (200 + MB)을 다운로드하는 클라이언트는 종종 몇 가지 MBs 후 “실패 – 네트워크 오류”를 얻을. 서버에서 HTTP/2를 먼저 사용하지 않도록 설정하여 동일한 문제인지 확인합니다. 그렇다면 대신 Http2MinSendRate를 사용하면 보다 부드러운 솔루션을 시도합니다.

(KB4093119가 실제로 이 서버에 설치되어 있는지 확인했습니다. 그리고 실제로 그것은 단지 며칠 전 윈도우 업데이트에서 수행되었다. 흠…) 주변의 인터넷 검색을 통해 Windows.Web.Http.HttpClient가 다운로드 진행률을 얻을 수있는 방법을 제공한다는 것을 알게되었습니다. 코어의 HttpClient를 사용하여 대용량 파일을 다운로드 할 때 일종의 진행 률 정보를 얻을 ASP.NET 수있는 방법이 있습니까? 감사합니다 에드워드, 아니 그들은 같은 서버에 없는, 내 사이트는 서버에 내 파일은 다른 서버에, 그들은 같은 서버 또는 심지어 같은 국가에 없습니다. 내 파일은 내 사이트 서버(dl.mysite.com)에 매핑되는 다른 다운로드 서버에서 찾습니다. 공유 호스트를 사용하고 있기 때문에 IIS에 액세스 할 수 없지만 URL에서 파일을 가져와서 생성 된 링크가있는 사용자 컴퓨터에 다운로드 할 수있는 코드가있는 솔루션이 있다고 확신합니다. 컨트롤러 이름과 경로는 사용자에게 달려 있습니다. 파일을 다운로드하는 것은 매우 간단합니다.

System.IO 네임스페이스를 사용하여 디스크에서 파일을 가져오고 작업에서 스트림을 반환합니다.

Comments are closed.