에서 / 다운로드 파일 서버를 얻기 위해 웹 클라이언트 방법

  오늘의 주요 기록, 공유, 다운로드 사용 웹 클라이언트에 두 가지 방법 / 파일을 얻을.  

  몇 마디의 사람이 코드를 삽입했다.

  첫 번째 : 캡슐화 방법에서 사용하는 웹 클라이언트 다음 DownloadFile은 () ; 쉽게 직접 다운로드합니다.

        ///  <요약> 
        /// 파일을 다운로드 (WebClient.DownloadFile)
         ///  </ 요약> 
        ///  <PARAM NAME = "downFileUrl"> 파일 다운로드 링크 주소 </ PARAM> 
        ///  <PARAM NAME = " savePath "> 경로 저장 </ PARAM> 
        ///  <반품> </ 반품> 
        공공  정적  문자열 DownLoadFileByWebClientStatic ( 문자열 downFileUrl, 문자열 savepath) 
        { 
            문자열 결과 = 문자열 .Empty;
             은 try 
            { 
                웹 클라이언트 wcClient = 새로운 새로운 웹 클라이언트 ();
                wcClient.DownloadFile (downFileUrl, savepath) 
                결과 = " 다운로드 성공 " ; 
            } 
            캐치 합니다 (WebException이 EX) 
            { 
                결과 = $ " 다운로드 실패 {ex.Message = 오류!} " ; 
            } 
            반환 결과; 
        } 

        ///  <요약> 
        /// 파일 (wcClient.DownloadFileAsync)을 다운로드
         ///  </ 요약> 
        ///  <PARAM NAME = "downFileUrl"> 파일 다운로드 링크 주소 </ PARAM> 
        ///  <PARAM NAME = "savepath">경로 저장 </ PARAM>
        ///  <반품> </ 반환> 
        공용  정적  스트링 DownLoadFileMethod ( 문자열 downFileUrl, 문자열 savepath) 
        { 
            문자열 결과 = 문자열 .Empty]
             은 try 
            { 
                웹 클라이언트 wcClient = 새로운 새 웹 클라이언트 (); 
                wcClient.DownloadDataCompleted + = (T, S) = > 
                { 
                    결과 = " 다운로드 성공 " ; // 직접 (무?)를 반환하지 않습니다 
                } 
                wcClient.DownloadFileAsync을 ( 새로운 새로운URI (downFileUrl) savePath); 
            } 
            캐치 (WebException이 예) 
            { 
                결과 = $ " 下载失败오류 = {ex.Message!} " ; 
            } 
            반환 결과를; 
        }

  두 번째 : 파일을 읽을 수있는 사용하여 파일을 얻을 / 다운로드를 스트리밍 . (자체 테스트를 통해)

     ///  <요약> 
        /// 다운로드 파일 (트림 가공 체)
         ///  </ 요약> 
        ///  <PARAM NAME = "downFileUrl"> 파일 링크 어드레스를 다운로드 </ PARAM> 
        ///  <PARAM NAME = " savePath "> 경로 저장 </ PARAM> 
        ///  <반품> </ 반품> 
        공공  정적  문자열 DownLoadFileByWebClient ( 문자열 downFileUrl, 문자열 savepath) 
        { 
            문자열 결과 = 문자열 .Empty;
             은 try 
            { 
                웹 클라이언트 wcClient = 새로운 새로운 웹 클라이언트 ();

                WebRequest를 webReq = 이 WebRequest.Create (downFileUrl); 
                WebResponse를 webRes = webReq.GetResponse ();
                 fileLength = webRes.ContentLength; 
                SRM 스트림 = ) (webRes.GetResponseStream; 
                에서는 StreamReader srmReader는 = 새로운 에서는 StreamReader (SRM)을; 

                바이트 [] = bufferbyte는 새로운  바이트 [fileLength];
                INT allByte = ( INT ) bufferbyte.Length;
                INT startByte는 = 0 ;
                동안(fileLength> 0 ) 
                { 
                    INT downByte = srm.Read (bufferbyte, StartByte, allByte),
                     경우 (downByte == 0 ) BREAK ; 
                    StartByte + = downByte, 
                    allByte - = downByte; 
                } 
                // 파일 저장 디렉토리가 있는지 여부를 감지 
                하는 경우 (! File.Exists (savepath)) 
                { 
                    문자열 []은 dirArray savePath.Split ( ' \\ ' )
                     문자열 TEMP = 문자열.빈;
                    위한 ( INT 난 = 0 -; I <dirArray.Length 1 ; I ++ ) 
                    { 
                        온도 + = dirArray [I] .Trim () + " \\ " ;
                        만약 (! Directory.Exists (임시)) 
                            Directory.CreateDirectory (임시) 
                    } 
                } 

                하여 (하여 FileStream fsSave = 새로운 하여 FileStream (savePath, FileMode.OpenOrCreate, FileAccess.Write)) 
                { 
                    fsSave.Write (bufferbyte, 0, Bufferbyte.Length) 
                    fsSave.Dispose (); 
                } 
                
                // 두 가지 방법을 사용하는 것과.
                // FileStream을 새로운 새 FS = FileStream을 (savepath, FileMode.OpenOrCreate, FileAccess.Write)
                 // fs.Write (bufferbyte, 0, bufferbyte.Length) 
                srm.Close (); 
                srmReader.Close (); 
                // FS. 닫기 (); 

                결과 = $ " 다운로드 성공 savepath {} = 경로 " ; 
            } 
            캐치 합니다 (WebException이 EX) 
            { 
                결과 = $ " = 오류! 다운로드 ex.Message을 {실패} "; 
            } 
            반환 결과를; 
        }
        

     파일을 다운로드하여 두 번째 스트림은, 메소드 가지 이유를 모르겠어요 :( OpenRead 웹 클라이언트 스트림에 () 방법의 사용을 확보 한 다음 파일 스트림을 읽어 자체 테스트 실패, 파일 열리지되지 않음)를 다운로드. 나는 합리적인 설명을 발견하지 않은, 당신이 의견을 바랍니다.    

 ///  <요약> 
        /// 다운로드 파일
         ///  </ 요약> 
        ///  <PARAM NAME = "URLAddress"> 자원의 URL </ PARAM> 
        ///  <PARAM NAME = "saveBasePath"> 저장 루트 디렉토리 / 디렉토리 </ PARAM> 
        ///  <반품> </ 반품> 
        공공  문자열 DownFileByStream ( 문자열 URLAddress, 문자열 saveBasePath) 
        { 
            문자열 결과 = 문자열 .Empty;
             은 try 
            { 
                웹 클라이언트 클라이언트 = 새로운 새로운 웹 클라이언트 (); 
                스트림 STR =client.OpenRead (URLAddress) 
                에서는 StreamReader 리더 = 새로운 새 에서는 StreamReader (STR) 

                의 바이트 [] 바이트 = 새로운 새  바이트 [ 1024 * 1024 ]; // 지정 크기 1M 
                INT allybytes = ( INT ) bytes.Length;
                 INT의 startbytes = 0 ; 

                그동안 (allybytes> 0 ) 
                { 
                    INT m = str.Read (바이트 startbytes, allybytes)   // 판독 바이트의 현재 위치를 얻는 
                    IF (m == 0 )
                         BREAK ;
                    startbytes + = m; 
                    allybytes - = m; 
                } 

                reader.Dispose (); 
                str.Dispose (); 
                
                문자열 경로 saveBasePath = + System.IO.Path.GetFileName (URLAddress); 
                하여 FileStream fsWrite는 = 새로운 하여 FileStream를 (경로 FileMode.OpenOrCreate, FileAccess.Write); 
                fsWrite.Write (바이트 0 , startbytes); 
                fsWrite.Flush (); 
                fsWrite.Close (); 

                결과 = " 下载成功! " ; 
            }
            캐치 (예외 예) 
            { 
                결과 = " 다운로드 실패! " + ex.Message; 
            } 
            반환 결과; 
        }

    불합리한 경우, 그 환영합니다. 다음은 오늘의 기록이다;이 문서의 내용의 대부분은 약간의 마감을하기 위해 여기에 찾을 수 있습니다.

    당신이 당신에게 도움이 기사를 생각한다면, "즐겨 찾기"버튼을 클릭하십시오! (/ : 스마일) 무단 전재에 오신 것을 환영합니다, 소스를 표시하시기 바랍니다.

 

추천

출처www.cnblogs.com/skyheaving/p/12499629.html