c# 웹 이미지 다운로드

원하는 웹 페이지를 찾았을 때 이미지 목록 단추를 클릭하여 프로그램이 페이지의 모든 이미지를 오른쪽에 표시하도록 합니다. 이 프로그램은 각 이미지를 최대 300×300픽셀로 제한하므로 그 중 어느 것도 너무 많은 공간을 차지하지 않습니다. 첫 번째 결함은 소스 코드가 HTML 코드에 나열된 URL이 있는 이미지에서만 작동한다는 것입니다. 즉, 플래시 이미지와 CSS 이미지가 감지되지 않습니다. 이러한 이미지를 가져오려면 원본 이미지 파일의 위치를 추적하려면 추가 코드가 필요합니다. 내가 찾은 게시물의 대부분은 두 번째 반복 후 시간 시간이 지됩니다. 특히 만약 당신이 내가 했던 것처럼 이미지가 있다면 무리를 통해 반복하는 경우. 그래서 위의 제안을 개선 하기 위해 여기 전체 방법: 웹 페이지의 이미지는 주로 다른 URL에서 직접 참조 하기 때문에 (이 문서에서 CSS 이미지를 무시 거 야), 웹 페이지의 HTML 코드에서 이미지 위치를 추출 하 여 다음 우리는 개별적으로 각 이미지를 다운로드할 수 있습니다. 참고: downloadFile 메서드 내에서 대신 클래스의 리스너를 추가하는 것이 더 쉬우므로 전역 범위에 있는 클라이언트가 cancelDownload 및 downloadFile 메서드에서 사용할 수 있도록 노출됩니다. 스니펫을 테스트하려면 메서드를 단추 쌍의 작업으로 추가하기만 하면 됩니다. 이전 예제에서는 DownloadFile 메서드의 작동 방식을 이해해야 합니다.

그러나 메서드를 구현 하 고 구체화 하는 방법에 따라 달라 집니다. DownloadFile 메서드는 주소 매개 변수에 의해 지정된 URI에서 로컬 파일 데이터에 다운로드합니다. 이 메서드는 리소스를 다운로드하는 동안 차단합니다. 리소스를 다운로드하고 서버의 응답을 기다리는 동안 계속 실행하려면 DownloadFileAsync 방법 중 하나를 사용합니다. TRY 블록에서이 코드에 큰 버그가 있다. 문제는 ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ WebClient wc = 새 웹 클라이언트(); 2. wc. 다운로드 파일(m.Value, @”C:_Images bg_”+ 마스터카운트 + “.gif”); 문제 라인 3. 스레드.수면 (1000); 문제 선 _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________코드를 실행할 때 1 번째 이미지를 다운로드하는 경우 위의 코드의 2 번째 줄을 실행할 수 없도록 훨씬 빠르게 실행됩니다. 사실, 위의 코드의 3 번째 줄은 모든 이미지가이 SLEEP-Time에서 다운로드를 완료 할 수 없기 때문에 여기에서도 쓸모가 없습니다. 따라서 대량의 이미지를 다운로드하는 가장 좋은 방법은 ASYNC 호출입니다.

모든 URL을 호출하여 ASYNC 모드에서 필요한 이미지를 다운로드할 수 있으며, 코드 실행 후 몇 분 안에 모든 이미지를 다운로드할 수 있습니다(인터넷 속도에 따라 다름) ______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ WebClient wc = 새 웹 클라이언트(); 2. wc. 다운로드FileAsync (m.Value, @”C:_Imagesbg_” + 마스터카운트 + “.gif”); 해결책 __________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 원래 웹 요청의 기본 이름을 사용하여 상대 URL을 절대 URL로 전환했습니다. 예를 들어 원래 URL이 www.gmail.com 경우 Gmail이 URL 주위로 이동하기 때문에 이미지가 www.gmail.com/[상대 URL]에 없을 수 있습니다. 많은 코드 없이 C#의 URL에서 이미지를 로드할 수 있습니다. 인터넷에서 이미지를 다운로드하는 것은 파일로 저장할 필요없이 메모리에 직접 수행 할 수 있습니다. 메모리의 이미지는 나중에 필요한 경우 디스크에 쓸 수 있습니다. 상대 URL을 사용하는 이미지에는 유효하지 않습니까? 웹 클라이언트 wchtml = 새 웹 클라이언트(); 문자열 htmlString = wchtml. 다운로드 스트링(“http://imgur.com/a/GPlx4″); int 마스터카운트 = 0; 정규기 정규패턴 = 새로운 정규기(@”http://i.imgur.com/(.*?) alt=”””, 정규선 옵션.단일 라인); 일치 컬렉션 일치이미지 링크 = regPattern.Match (htmlString); foreach (일치 img_match 일치이미지링크) { 문자열 imgurl = img_match. 그룹[1]. 값.토스트링(); 정규기 정규선 = 새로운 정규식(“http://\w+\\\\\\\++])+([a-zA-Z0-9\\\\\%].\%.).].].\\\\\\\%.].\%.].].].\\\%.].].].].\\\\\\\\\\\\\\\\\,*)”, 정규기옵션.무시대문자); 일치 컬렉션 ms = regx.

성냥(imgurl); foreach (ms에서 일치 m) { Console.WriteLine (“다운로드..