Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将文件从REST php服务器传输到Java客户端_Java_Php_Rest - Fatal编程技术网

如何将文件从REST php服务器传输到Java客户端

如何将文件从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变量作为响应发送 客户。。。我写的是:

我一直在浏览这个网站,寻找一个关于如何编写代码的示例或“隧道尽头的灯”,让我可以将文件从PHP的REST服务器下载到JAVA的客户端

客户端将发出一个带有文件ID的GET请求,然后PHP REST代码将响应该文件,JAVA将接收该文件并将其存储在硬盘中

有什么想法吗。。。? 我试着这样做PHP Rest服务器…:

$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中所说的很酷,很有效。谢谢!此链接指向同一主题: