2012-02-07 91 views
0

堆垛机... 我有一个共享文件夹中的Web服务器...它的地址是:安卓HTTP客户端下载广告上传文件

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

我用Google搜索了很多资料有关下载文件和需要帮助。 ..

  1. 下载是成功的...我怎么上传文件到我的droid? (服务器权限已启用)...

    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将立即重试。如何实现它我的羽绒/ UpLoading?

回答

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 
       } 
+0

SoapRequestProcessor.authKey() - 它是什么? – timonvlad 2012-02-07 10:01:20

+0

您可以跳过该行。实际上在我的情况下,身份验证密钥也是需要的。 – SAMD 2012-02-07 12:32:26

2

要上传您可以使用多部分请求的文件: 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 
      } 
     });