hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From JBRyu <Jongbeom....@comparatio.com>
Subject Re: How to download .jar file? (I think that I read most of threads and googled alot..)
Date Fri, 23 May 2008 15:48:15 GMT

Thank Oleg. I appreciate your quick response.

I have tested your code, and it works fine. Based on your code, I found a
problem in my code, that is, when I uploaded several jar files, some of jar
files are corrupted already. So, I thought that this problem was caused by
the downloading process but it was not.

Thanks again.
JB



olegk wrote:
> 
> On Thu, 2008-05-22 at 21:46 -0700, JBRyu wrote:
>> Hi,
>> 
>> I have a problem with downloading a .jar file from a HTTP server. I'm now
>> using httpclient-4.0-alpha4 and httpcore-4.0-beta1 libraries. I can
>> download
>> any .jar file using a http input stream, but the download .jar file is
>> corrupted even if the size of the downloaded file is the same as that of
>> the
>> original file on the HTTP server so I can't decompress it because it is
>> broken. Please see Case #1 for details. So, I use ZipInputStream class
>> for
>> reading the compressed file from the HTTP server. However, when I read
>> bytes
>> from the ZipInputStream, it always returns -1 at the first time and is
>> hanging there. It seems like that the stream is not broken but dosen't do
>> anything. Please seee Case #2 for details.
>> 
>> I spent lots of time but couldn't figure it out. Is there any one who
>> faced
>> this problem and resolved it? 
>> 
>> Thank you for all your helps.
>> JB
>> 
> 
> I do not see any obvious problems with your code aside from that fact
> that you should use HttpEntity#getContentLength() method to find out the
> length of the incoming content instead of parsing 'content-length'
> header manually. 
> 
> I wrote this small app to test similar scenario and it worked for me. I
> got perfectly valid jar.
> 
> ==================================
> 
> DefaultHttpClient httpclient = new DefaultHttpClient();
> 
> HttpGet httpget = new HttpGet(
> "http://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.0-beta1/httpcore-4.0-beta1.jar");
> 
> System.out.println("executing request: " + httpget.getRequestLine());
> 
> HttpResponse response = httpclient.execute(httpget);
> HttpEntity entity = response.getEntity();
> 
> System.out.println("----------------------------------------");
> System.out.println(response.getStatusLine());
> if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
>     if (entity != null) {
>         System.out.println("File size: " + entity.getContentLength());
>         
>         File file = new File("local.jar");
>         
>         InputStream instream = null;
>         OutputStream outstream = null;
>         try {
>             instream = entity.getContent();
>             outstream = new FileOutputStream(file);
>             
>             byte[] tmp = new byte[4096];
>             int l;
>             while ((l = instream.read(tmp)) != -1) {
>                 outstream.write(tmp, 0, l);
>             }
>             outstream.flush();
>         } finally {
>             if (instream != null) {
>                 instream.close();
>             }
>             if (outstream != null) {
>                 outstream.close();
>             }
>         }
>     }
> } else {
>     if (entity != null) {
>         entity.consumeContent();
>     }
> }
> 
> ==================================
> 
> Oleg
> 
>> 
>> <Case #1>
>> 
>> HttpGet httpGet = new HttpGet(httpFilePath);
>> HttpResponse response = httpClient.execute(httpGet);
>> int responseCode = response.getStatusLine().getStatusCode();
>> 
>> // Checks the HTTP server response code.
>> if ( responseCode ==
>> Client_HTTPDownloadConstants.HTTP_RESPONSE_CODE_SUCCESSFUL ) {
>>    // Retrieves the target file size from the response header.
>>    Header[] headers = response.getHeaders("Content-Length");
>>    
>>    // Retrieves the target file size.
>>    int fileSize = Integer.valueOf(headers[0].getValue());
>>    
>>    // Prepares an input stream to read the source file bytes from the
>> HTTP
>> server.
>>    InputStream fis = response.getEntity().getContent();			                    
>>    
>>    // Prepares a file output stream to write the downloaded bytes to the
>> local file.
>>    FileOutputStream fos = new FileOutputStream(tmpFilePath)
>>    
>>    // Initializes the written bytes of the current file.
>>    int bytesWritten = 0;
>>    
>>    // Reads the bytes from the HTTP server.
>>    int bytesRead = fis.read(buffer);
>>    								    				
>>    while (bytesRead != -1) {
>>       // Writes bytes to the local file.
>>       fos.write(buffer, 0, bytesRead);
>>       
>>       // Reads bytes from the local file.
>>       bytesRead = fis.read(buffer);
>>    }
>>    							    		        	
>>    // Closes the input and output streams.
>>    if (fos != null) {
>>       fos.flush();
>>       fos.close();
>>    }
>>    if (fis != null) {
>>       fis.close();
>>    }
>> }
>> 
>> 
>> <Case #2>
>> 
>> HttpGet httpGet = new HttpGet(httpFilePath);
>> HttpResponse response = httpClient.execute(httpGet);
>> int responseCode = response.getStatusLine().getStatusCode();
>> 
>> // Checks the HTTP server response code.
>> if ( responseCode ==
>> Client_HTTPDownloadConstants.HTTP_RESPONSE_CODE_SUCCESSFUL ) {
>>    // Retrieves the target file size from the response header.
>>    Header[] headers = response.getHeaders("Content-Length");
>>    
>>    // Retrieves the target file size.
>>    int fileSize = Integer.valueOf(headers[0].getValue());
>>    
>>    // Prepares an input stream to read the source file bytes from the
>> HTTP
>> server.
>>    InputStream fis = response.getEntity().getContent();			                    
>>    
>>    // Prepares a ZIP input stream.
>>    ZipInputStream zis = new ZipInputStream(fis);
>>    
>>    // Prepares a file output stream to write the downloaded bytes to the
>> local file.
>>    FileOutputStream fos = new FileOutputStream(tmpFilePath)
>>    
>>    // Initializes the written bytes of the current file.
>>    int bytesWritten = 0;
>>    
>>    // Reads the bytes from the HTTP server.
>>    int bytesRead = zis.read(buffer);
>>    								    				
>>    while (bytesRead != -1) {
>>       // Writes bytes to the local file.
>>       fos.write(buffer, 0, bytesRead);
>>       
>>       // Reads bytes from the local file.
>>       bytesRead = zis.read(buffer);
>>    }
>>    				    		        	
>>    // Closes the input and output streams.
>>    if (fos != null) {
>>       fos.flush();
>>       fos.close();
>>    }
>>    if (zis != null) {
>>       zis.close();
>>    }
>>    if (fis != null) {
>>       fis.close();
>>    }
>> }
>> 
>> 
>> 
>> 
>> -- 
>> View this message in context:
>> http://www.nabble.com/How-to-download-.jar-file--%28I-think-that-I-read-most-of-threads-and-googled-alot..%29-tp17418619p17418619.html
>> Sent from the HttpClient-User mailing list archive at Nabble.com.
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/How-to-download-.jar-file--%28I-think-that-I-read-most-of-threads-and-googled-alot..%29-tp17418619p17427930.html
Sent from the HttpClient-User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Mime
View raw message