Размещение файлов MP3 с Java - PullRequest
1 голос
/ 30 апреля 2019

Итак, я пытаюсь подражать чему-то похожему на то, что настроил этот сайт:

http://www.ntonyx.com/mp3files/Morning_Flower.mp3

В тех случаях, когда браузер, подобный Chrome, переходит на этот точный URL, в основном появляется проигрыватель, и вы можете «транслировать» музыку.

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class WebServer {

    public static void main(String[] args) throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
        server.createContext("/test/file.mp3", new MyHandler());
        server.setExecutor(null); // creates a default executor
        server.start();
    }

    static class MyHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange t) throws IOException {
            String response = "This is the response";
            t.sendResponseHeaders(200, response.length());
            OutputStream os = t.getResponseBody();
            os.write(response.getBytes());
            os.close();
        }
    }

}

Я пытаюсь подражать этому с помощью простого кода Java. Где я изо всех сил пытаюсь выяснить, как я должен отформатировать запрос, чтобы появиться таким образом. Есть ли способ отправить локальный файл, хранящийся на моем диске, к запросу? Я изо всех сил пытался найти пример того, как это сделать

1 Ответ

1 голос
/ 01 мая 2019

Вы можете использовать FileInputStream, чтобы прочитать байты вашего файла для отправки в браузер:

import java.io.IOException;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.net.InetSocketAddress;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class WebServer {

    public static void main(String[] args) throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
        server.createContext("/test/file.mp3", new MyHandler());
        server.setExecutor(null); // creates a default executor
        server.start();
    }

    static class MyHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange t) throws IOException {

            File file = new File("path/to/file.mp3");                 // Create a new File object pointing to your mp3 file   

            /* https://stackoverflow.com/questions/38679686/ :) */   
            t.getResponseHeaders().put("Content-Type", "audio/mpeg"); // Make sure the browser knows this is an audio file
            t.sendResponseHeaders(200, file.length());                // Send the length of the file to the browser

            FileInputStream stream = new FileInputStream(file);       // Open an InputStream to read your file
            OutputStream os = t.getResponseBody();
            byte[] buff = new byte[1024];                             // Create a small buffer to hold bytes as you read them
            int read = 0;                                             // Keep track of how many bytes you read

            // While there are still bytes to read, send them to the client
            while((read = stream.read(buff)) > 0) {
                os.write(buff, 0, read);
            }
            // Close the streams
            os.close();
            stream.close();
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...