Как обслуживать mp3-файл с помощью последней версии NanoHTTPD 2.3.0 в Android?

Я прочитал Как обслуживать файл на SD-карте с помощью NanoHTTPD (внутри Android)

Код return new NanoHTTPD.Response(Status.OK, "audio/mpeg", fis) снова не поддерживается в последней версии NanoHTTPD 2.3.0.

Я пытаюсь заменить его на return newFixedLengthResponse(fis) , но это неправильно. Как я могу это сделать? Спасибо!

public class StackOverflowMp3Server extends NanoHTTPD {

    public StackOverflowMp3Server() {
         super(8089);
    }

    @Override
    public Response serve(String uri, Method method,
        Map<String, String> header, Map<String, String> parameters,
        Map<String, String> files) {
    String answer = "";

    FileInputStream fis = null;
    try {
        fis = new FileInputStream(Environment.getExternalStorageDirectory()
                + "/music/musicfile.mp3");
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return new NanoHTTPD.Response(Status.OK, "audio/mpeg", fis);
  }
}

person HelloCW    schedule 12.04.2016    source источник
comment
Ну и как теперь выглядит декларация Response? И какое сообщение об ошибке вы получаете для старого?   -  person greenapps    schedule 12.04.2016
comment
Код возвращает новый NanoHTTPD.Response(Status.OK, audio/mpeg, fis) не может быть скомпилирован, когда я использую NanoHTTPD 2.3.0   -  person HelloCW    schedule 12.04.2016
comment
Гораздо важнее, чтобы вы ответили на мой первый вопрос. Почему нет? IDE покажет вам, как это нужно сделать.   -  person greenapps    schedule 12.04.2016
comment
Не могли бы вы посмотреть dropbox.com/s/8sppvuwkwg9hscz/aa.bmp? дл=0   -  person HelloCW    schedule 12.04.2016
comment
comment
Пожалуйста, не размещайте ссылки, требующие авторизации. И это было не то, что я спросил.   -  person greenapps    schedule 12.04.2016
comment
Что вам нужно сделать, так это просто ввести NanoHTTPD. и подождать. IDE (хорошо, в Eclipse, но в Android Studio тоже будет что-то подобное) покажет вам доступные функции. Вероятно, также другой член Response.   -  person greenapps    schedule 12.04.2016
comment
Спасибо! но я не могу понять, что вы имеете в виду! Я только надеюсь исправить код, возвращающий новый NanoHTTPD.Response(Status.OK, audio/mpeg, fis) в последнем NanoHTTPD   -  person HelloCW    schedule 12.04.2016
comment
Просто сделайте то, что я предложил в редакторе. Введите его и подождите.   -  person greenapps    schedule 12.04.2016
comment
В противном случае вы копаетесь в коде NanoHTTPD:Response и смотрите, как он объявлен. Будет добавлен или изменен параметр. Это все, что я думаю.   -  person greenapps    schedule 12.04.2016
comment
Удивляюсь, что вы никогда не видели, что IDE постоянно предлагает функции-члены, как только вы набираете точку.   -  person greenapps    schedule 12.04.2016


Ответы (3)


Вы можете использовать метод newChunkedResponse() для InputStream следующим образом:

return newChunkedResponse(Status.OK, "audio/mpeg", fis);

person Anton Tananaev    schedule 13.04.2016
comment
Обновлен ответ с более подробной информацией. - person Anton Tananaev; 13.04.2016
comment
после 2 часов борьбы с сотнями строк кода это действительно сработало! :D блин, почему я не нашел его раньше. кому угодно - ЭТО РАБОТАЕТ ДЛЯ БОЛЬШИХ ФАЙЛОВ! - person hocikto; 26.04.2017

Этот код работает нормально (поместите звук в папку с ресурсами)

class SoundServer extends NanoHTTPD {

    SoundServer() {
        super(8089);
    }

    @Override
    public Response serve(IHTTPSession session) {
        InputStream myInput = null;
        try {
            myInput = mContext.getAssets().open("sound.mp3");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return createResponse(Response.Status.OK, "audio/mpeg", myInput);
    }

    //Announce that the file server accepts partial content requests
    private Response createResponse(Response.Status status, String mimeType,
                                    InputStream message) {
        return newChunkedResponse(status, mimeType, message);
    }
}
person Artificioo    schedule 09.10.2017

Этот код работает для обслуживания файлов любого типа с веб-сервера nanohttpd.

 @Override
public Response serve(IHTTPSession session) {
    String msg = "<html><body><h1>Hello server</h1></body></html>\n";
    String msgUnauthorized = "<html><body><h1>Unauthorized</h1></body></html>\n";
    Method method = session.getMethod();
    String uri = session.getUri();
    Map<String, String> files = new HashMap<>();
    Storage storage = new Storage(OpenRAP.getContext());
    String currentpath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/www/";
    String temp = Environment.getExternalStorageDirectory().getAbsolutePath() + "/www/temp/";
    String ecarpath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/www/ecars_files/";
    String xcontent = Environment.getExternalStorageDirectory().getAbsolutePath() + "/www/xcontent/";
    MainActivity.checkfiles();
    updateurl();
    String Endpoint = session.getUri();
    if (Endpoint.equals("/")) {

        String answer = "";
        try {
            // Open file from SD Card
            File root = Environment.getExternalStorageDirectory().getAbsoluteFile();
            FileReader index = new FileReader(root +
                    "/www/openrap/index.html");
            BufferedReader reader = new BufferedReader(index);
            String line = "";
            while ((line = reader.readLine()) != null) {
                answer += line;
            }
            reader.close();
        } catch (IOException ioe) {
            Log.w("Httpd", ioe.toString());
        }

        return newFixedLengthResponse(answer);
    }
    else if (uri.equals("/app-debug.apk")) {

        File root = Environment.getExternalStorageDirectory();
        FileInputStream fis = null;
        File file = new File(root.getAbsolutePath() + "/www/resources/app-debug.apk");
        String mime = NanoHTTPD.getMimeTypeForFile("app-debug.apk");
        Log.d("Path", root.getAbsolutePath());
        try {
            if (file.exists()) {
                fis = new FileInputStream(file);

            } else
                Log.d("FOF :", "File Not exists:");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }


        return newFixedLengthResponse(Response.Status.OK, mime, fis, file.length());
    }

Здесь я отправляю файл apk, вы можете использовать любой тип файла с соответствующим форматом и именем файла.

person sanjay    schedule 30.10.2018