2012-08-22 64 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()); 
    }