2012-08-22 90 views
2

我已經創建了一個HTTP文件服務器,目的是將媒體文件(mp3,ogg等)傳輸到Android設備。當服務器從Android瀏覽器訪問像android httpclient觸發從服務器下載

10.0.2.2:portNumber/path/to/file

服務器啓動文件下載進程。當然,客戶不會這樣做,對於測試文件服務器來說是很好的。 我是Android開發新手,已經瞭解到httpclient包可以管理get/post請求。這是我一直在使用的示例代碼讀取響應

DefaultHttpClient client = new DefaultHttpClient(); 
HttpGet httpGet = new HttpGet(url); 
try { 
    HttpResponse execute = client.execute(httpGet); 
    InputStream content = execute.getEntity().getContent(); 

    BufferedReader buffer = new BufferedReader(new InputStreamReader(content)); 
    String s = ""; 
    while ((s = buffer.readLine()) != null) { 
    response += s; 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

return response; 

上面的代碼工作正常時,服務器會發送一個JSON文件的列表。由於發送文件的服務器部分已經被編碼,所以我陷入困境的一點是在檢索android上的媒體文件。

我很困惑如何接收服務器發送的mp3文件。他們是否應該在流中閱讀?謝謝

回答

2

是的,你想通過輸入流將文件讀取到磁盤上。 下面是一個例子。如果您不想要文件下載進度條,請刪除與進度相關的代碼。

try { 
     File f = new File("yourfilename.mp3"); 
     if (f.exists()) { 
      publishProgress(100,100); 
     } else { 
      int count; 
      URL url = new URL("http://site:port/your/mp3file/here.mp3"); 
      URLConnection connection = url.openConnection(); 
      connection.connect(); 
      int lengthOfFile = connection.getContentLength(); 
      long total = 0; 
      InputStream input = new BufferedInputStream(url.openStream()); 
      OutputStream output = new FileOutputStream(f); 
      byte data[] = new byte[1024]; 
      while ((count = input.read(data)) != -1) { 
       total += count; 
       publishProgress((int)(total/1024),lengthOfFile/1024); 
       output.write(data, 0, count); 
      } 
      output.flush(); 
      output.close(); 
      input.close(); 
     } 
    } catch (Exception e) { 
     Log.e("Download Error: ", e.toString()); 
    }