[英]Java: Transfer a file from server to client and from client to server
[英]How to transfer a file from REST php server to a Java client
我一直在这个网站上冲浪,寻找有关如何编写代码的示例或“隧道尽头”,该代码可让我从PHP的REST服务器下载文件到JAVA的客户端。
客户端将发出带有文件ID的GET请求,然后PHP REST代码将对该文件做出响应,JAVA会接收该文件并将其存储在硬盘中。
任何想法...? 我试图像这样做PHP Rest服务器...:
$file = 'path_to_file/file.mp3';
$content = readfile($file);
这个$ content var作为响应发送...
我写的客户是:
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文件)时,应使用InputStream和OutputStream而不是Readers / Writers。 另外,BufferedReader.readLine()也会从输出中剥离所有“换行符”。
因为您使用的是Readers / Writers,所以二进制数据将被转换为Strings,并且我敢肯定会发生很多损坏。
请尝试以下操作:
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.