0

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 ファイルを使用した私の例では、クライアントの音楽プレーヤーは、ファイルが破損しているか、動作しないと言っています。 .

助けてくれてありがとう。

4

1 に答える 1

0

バイナリ データ (MP3 ファイル) を扱う場合は、Readers/Writer ではなく、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
}
于 2013-10-21T21:36:05.437 に答える