android http客户端下载广告上传文件

时间:2012-02-07 06:13:06

标签: android android-ndk android-networking

...堆垛 我有一个带共享文件夹的网络服务器...它的地址是:

    "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. 网络连接经常失败,特别是对于移动客户端。例如,如果您从Wifi切换到3G,则现有网络连接将中断,您需要重试该请求。 Apache HttpClient注册了一个默认的DefaultHttpRequestRetryHandler对象,默认情况下会重试3次失败的连接。问题是从一个网络切换到另一个网络需要一段时间,DefaultHttpRequestRetryHandler将立即重试。如何实现MY Down / UpLoading ???

2 个答案:

答案 0 :(得分:2)

要上传文件,您可以使用Multipart请求: 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 :(得分: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
                }