0

STACkers... I have a webserver with shared folder... It's address is:

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

I have googled a lot of information about downloading files and need help...

  1. Downloading is success... How can I do uploading files to my droid??? (permissions on server are enabled)...

    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. Network connection fail frequently especially for mobile clients. For example if you switch from Wifi to 3G then an existing network connection will break and you need to retry the request. The Apache HttpClient has an default DefaultHttpRequestRetryHandler object registered which will per default 3 times retry a failed connection. The problem is that switching from one network to another make take a little while and DefaultHttpRequestRetryHandler will retry immediately. How implement it to MY Down/UpLoading???
4

2 回答 2

2

To upload a file you can use a Multipart request: 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
          }
        });
于 2012-02-07T07:21:21.493 回答
1
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
                }
于 2012-02-07T07:12:56.097 回答