如何将文件从REST php服务器传输到Java客户端
我一直在浏览这个网站,寻找一个关于如何编写代码的示例或“隧道尽头的灯”,让我可以将文件从PHP的REST服务器下载到JAVA的客户端 客户端将发出一个带有文件ID的GET请求,然后PHP REST代码将响应该文件,JAVA将接收该文件并将其存储在硬盘中 有什么想法吗。。。? 我试着这样做PHP Rest服务器…:如何将文件从REST php服务器传输到Java客户端,java,php,rest,Java,Php,Rest,我一直在浏览这个网站,寻找一个关于如何编写代码的示例或“隧道尽头的灯”,让我可以将文件从PHP的REST服务器下载到JAVA的客户端 客户端将发出一个带有文件ID的GET请求,然后PHP REST代码将响应该文件,JAVA将接收该文件并将其存储在硬盘中 有什么想法吗。。。? 我试着这样做PHP Rest服务器…: $file = 'path_to_file/file.mp3'; $content = readfile($file); 这个$content变量作为响应发送 客户。。。我写的是:
$file = 'path_to_file/file.mp3';
$content = readfile($file);
这个$content变量作为响应发送
客户。。。我写的是:
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文件示例中,客户端上的任何音乐播放器都会说该文件已损坏或无法工作
谢谢您的帮助。在处理二进制数据(MP3文件)时,您应该使用而不是读写器。此外,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
}
你自己做过基本的调试吗?e、 g.比较下载的mp3与服务器上的内容?文件大小匹配吗?不在文本/十六进制编辑器中打开下载的版本,看看有什么不同?我想你应该读写
byte[]
s,而不是String
s。你只是用PHP编写代码,或者你实际上是在发送标题,就像通常会做的那样。查看这里的第一个示例以了解更多信息。是的,我从PHP发送了正确的标题。问题出在JAVA客户机上,它试图使用writer对象编写下载,而不是使用输入/输出流。我现在测试、下载并正确播放了音频文件。谢谢大家。答案是:URL URL=newurl(“);HttpURLConnection connection=(HttpURLConnection)URL.openConnection();connection.setRequestMethod(“GET”);IntpuStream in=connection.getInputStream();FileOutputStream out=newfileoutputstream(“file.mp3”);copy(in,out,1024);out.close();public static void copy(InputStream input,OutputStream output,int bufferSize)抛出IOException{byte[]buf=新字节[bufferSize];int n=输入.read(buf);而(n>=0){output.write(buf,0,n);n=输入.read(buf);}output.flush();}你在Answare中所说的很酷,很有效。谢谢!此链接指向同一主题: