2013-10-21 66 views
0

我一直在网上冲浪寻找一个例子或“在隧道的尽头”关于如何编写一个代码,让我下载一个文件从PHP中的REST服务器到JAVA中的客户端。如何将文件从REST php服务器传输到Java客户端

客户端将使用该文件的ID进行GET请求,然后PHP REST代码应该对该文件进行响应,并且JAVA接收该文件并将其存储在硬盘驱动器中。

任何想法......? 我试图做的PHP REST服务器这样的...:

$file = 'path_to_file/file.mp3'; 
$content = readfile($file); 

这$内容变种,被作为响应...

客户端...我写的是:

try { 
    URL url = new URL("url/to/rest/server"); 
    HttpURLConnection conn (HttpURLConnection) url.openConnection(); 
    conn.setRequestMethod("GET"); 
    conn.setRequestProperty("Accept", "Content-Disposition: filename\"music.mp3\""); 

    if(conn.getResponseCode() != 200) { 
     throw new RuntimeException("Failed : HTTP error code: " + conn.getResponseCode()); 
    } 

    BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()))); 

    try { 
     String output; 
     File newFile = newFile("/some/path/file.mp3"); 
     fileWriter fw = new FileWriter(newFile); 

     while ((output = br.readLine()) != null) { 
      fw.write(output); 
     } 
     fw.close(); 
    } catch (IOException iox) { 
     //do 
    } 
} catch (MalformedURLException e) { 
    //do 
} 

我的例子中的问题是,当我收到客户端上的文件类型的损坏或东西!......我与一个MP3文件的例子,在客户端上的任何音乐播放器说,文件已损坏或者它不起作用。

感谢您的任何帮助。

+0

你做任何基本的调试自己吗?例如比较下载的mp3 v.s.服务器上有什么?文件大小匹配?没有?在文本/十六进制编辑器中打开下载的版本,看看有什么不同? –

+0

我想你应该读写'byte []'s而不是'String's。 –

+0

是你只用PHP编码,还是实际发送头文件等?查看第一个例子来获取更多信息。 http://php.net/manual/en/function.readfile.php –

回答

0

当处理二进制数据(MP3文件)时,您应该使用InputStreamOutputStream而不是读者/作者。此外,BufferedReader.readLine()也会从输出中剥离任何“换行符”。

因为您正在使用读者/作家,二进制数据正在转换为字符串,并且我确信有很多腐败发生。

尝试以下操作:

InputStream is = conn.getInputStream(); 
byte[] buffer = new byte[10240]; // 10K is a 'reasonable' amount 

try { 
    File newFile = newFile("/some/path/file.mp3"); 
    FileOutputStream fos = new FileOutputStream(newFile); 

    int len = 0; 
    while ((len = is.read(buffer)) >= 0) { 
     fos.write(buffer, 0, len); 
    } 
    fos.close(); 
} catch (IOException iox) { 
    //do 
} 
+0

这就是答案: URL url = new URL(“http://xyz.com/id”); HttpURLConnection连接=(HttpURLConnection)url.openConnection(); connection.setRequestMethod(“GET”); IntpuStream in = connection.getInputStream(); FileOutputStream out = new FileOutputStream(“file.mp3”); copy(in,out,1024); out.close();公共静态无效复制(InputStream输入,OutputStream输出,int缓冲区大小)抛出IOException异常{[buf = new byte [bufferSize]; int n = input.read(buf); (n> = 0)output.write(buf,0,n); n = input.read(buf); } output.flush(); } –

+0

你在回答中说了什么,很酷,而且很有效。谢谢! –

+0

此链接指向同一主题:http://stackoverflow.com/questions/18445593/getting-a-zip-file-with-a-java-rest-client-resteasy –

相关问题