HTTP-клиент Android скачать файл загрузки объявлений - PullRequest
0 голосов
/ 07 февраля 2012

STACkers ... У меня есть веб-сервер с общей папкой ... Его адрес:

    "http://192.168.1.1:9999/folder/0" 

Я нашел много информации о загрузке файлов и мне нужна помощь ...

  1. Загрузка прошла успешно ... Как мне загрузить файлы на мой дроид ???(разрешения на сервере включены) ...

    case R.id.download:
        try {
             java.net.URL u = new java.net.URL("http://192.168.1.1:9999/file/2/01.mp3");
                HttpURLConnection c = (HttpURLConnection) u.openConnection();
    
                c.setRequestMethod("GET");
                c.setDoOutput(true);
                c.connect();
                FileOutputStream f = new FileOutputStream(new File("/sdcard/in", "01.mp3"));
    
    
                InputStream in = c.getInputStream();
    
                byte[] buffer = new byte[1024];
                int len1 = 0;
                while ( (len1 = in.read(buffer)) > 0 ) 
                {
                     f.write(buffer,0, len1);
                }
                f.close();
        }
        catch (Exception e) {
            System.out.println("Nay, did not work");
            textView.setText(e.getMessage());
        }
        break;  
    
  2. Часто происходит сбой сетевого подключения, особенно для мобильных клиентов.Например, если вы переключаетесь с Wi-Fi на 3G, то существующее сетевое соединение разрывается, и вам нужно повторить запрос.Apache HttpClient имеет зарегистрированный по умолчанию объект DefaultHttpRequestRetryHandler, который по умолчанию будет 3 раза повторять неудачное соединение.Проблема в том, что переключение из одной сети в другую занимает некоторое время, и DefaultHttpRequestRetryHandler немедленно повторяет попытку.Как реализовать это в MY Down / UpLoading ???

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Для загрузки файла вы можете использовать многочастный запрос: http://hc.apache.org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/MultipartEntity.html

        client = new DefaultHttpClient(...);
        HttpPost post = new HttpPost("some url");
        MultipartEntity multipart = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);  
        multipart.addPart("Description", new StringBody("Description"));
        multipart.addPart("File", new FileBody(fileObject));
        post.setEntity(multipart);

        client.execute(post, new ResponseHandler() {

         @Override
         public Object handleResponse(HttpResponse response)
            throws ClientProtocolException, IOException {
             //handle response
          }
        });
1 голос
/ 07 февраля 2012
Please make sure you have the required Web Services for Posting.
Just pass the file and url of server and the following should run. 

   try{
                    int maxBufferSize=1024*1024;
                    File file = new File(YourPathToFile); 
                    String fileName = file.getName();

                        URL url = new URL(YourUrlServer);
                       connection = (HttpURLConnection) url.openConnection();
                   // Allow Inputs & Outputs
                    connection.setDoInput(true);
                    connection.setDoOutput(true);
                    connection.setUseCaches(false);
                    // Enable POST method
                    connection.setRequestMethod("GET");
                    connection.setRequestProperty("Connection", "Keep-Alive");
                    connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
                    connection.setChunkedStreamingMode(maxBufferSize);
                    outputStream = new DataOutputStream( connection.getOutputStream() );

                    fileInputStream = new FileInputStream(file);


                    outputStream.writeBytes(twoHyphens + boundary + lineEnd);
                    outputStream.writeBytes("Content-Disposition: form-data; name=\"strAuthKey\"" + lineEnd);
                    outputStream.writeBytes(lineEnd);
                    outputStream.writeBytes(SoapRequestProcessor.authKey());//authentication key
                    outputStream.writeBytes(lineEnd);

                    outputStream.writeBytes(twoHyphens + boundary + lineEnd);
                    outputStream.writeBytes("Content-Disposition: form-data; name=\"mediaName\"" + lineEnd);
                    outputStream.writeBytes(lineEnd);
                    outputStream.writeBytes(fileName); //file.lastModified()+"_"+
                    outputStream.writeBytes(lineEnd);


                    outputStream.writeBytes(twoHyphens + boundary + lineEnd);
                    outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"IMAGEFILE\"" + lineEnd);
                    outputStream.writeBytes(lineEnd);
                    bytesAvailable = fileInputStream.available();
                    bufferSize = Math.min(bytesAvailable, maxBufferSize);
                    buffer = new byte[bufferSize];
                    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                    while (bytesRead > 0)
                    {
                    outputStream.write(buffer, 0, bufferSize);
                    bytesAvailable = fileInputStream.available();
                    bufferSize = Math.min(bytesAvailable, maxBufferSize);
                    buffer = new byte[bufferSize];
                    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                    }

                   outputStream.writeBytes(lineEnd);



                    outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                    fileInputStream.close();
                        outputStream.close();
                    Log.d("RESPONSE","--"+connection.getResponseMessage());
    }
                   catch (Exception e) {
                    Log.i("Exception: ",e.toString());

                    // TODO: handle exception
                }
...