Nanohttpd обслуживает несколько файлов

Используя nanohttpd, я могу выбрать выбранный файл и запустить сервер для обслуживания этого файла.

Можно ли обслуживать список большого количества файлов?
То есть у меня много файлов на SD-карте, и я хочу обслуживать выбранные из них. Итак, как указать массив путей к этим файлам и сгенерировать и вернуть для них URL-адрес, чтобы я мог получить к ним доступ из сети.

Это не HTML-страница со списком всех этих файлов и папок.
Я просмотрел это, я имею в виду не это. В этом он просто перечисляет корневую папку и перечисляет их все на странице HTML, чтобы пользователь мог просматривать/выбирать. Не то, что мне нужно.

Просто массив URL-адресов сервера для выбранного, выбранного списка файлов в SD-карте, который я затем могу использовать программно.

На данный момент у меня есть это

protected void onCreate(Bundle savedInstanceState) {
        ...
        server = new Mp3Server();
        try {
            server.start();
        } catch(IOException ioe) {
            Log.w("Httpd", "The server could not start.");
        }
        Log.w("Httpd", "Web server initialized.");
}
...
...
public class Mp3Server extends NanoHTTPD {

    public Mp3Server() {
        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("/storage/C67A-18F7/Music/music.mp3");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return newChunkedResponse(Status.OK, "audio/mpeg", fis);
    }
}

Или мне нужно передавать выбранный файл и запускать/останавливать сервер каждый раз для каждого файла? Но это звучит неэффективно.


person arjun    schedule 24.02.2018    source источник
comment
Вы можете обслуживать столько файлов, сколько хотите. Но именно браузер должен указать, какой файл ему нужен. Таким образом, браузер уже должен указать имя файла. В URL или как параметр запроса. Затем в serve() вы проверяете параметры uri и parameters.   -  person greenapps    schedule 24.02.2018
comment
Кроме того, если вы можете создать html-страницу с URL-адресами и ссылками, вы, конечно, также можете создать только URL-адреса. Я не вижу в этом проблемы.   -  person greenapps    schedule 24.02.2018
comment
По сути, вы говорите, что String uri может быть известным именем файла, а в FileInputStream мне просто нужно передать это?   -  person arjun    schedule 24.02.2018
comment
Да. Около. Если это имя файла, вы, конечно, должны добавить путь к папке. Но просто немного поэкспериментируйте. Поместите операторы Log.d() в serve() для регистрации uri и параметров, когда в браузере вы пробуете URL-адреса, такие как http://<ipaddress:port>/song3.mp3 или http://<ipaddress:port>/myfolder/song3.mp3 или http://<ipaddress:port>/folder?song=song3.mp3.   -  person greenapps    schedule 24.02.2018
comment
(Не используйте Toast() в serve(), так как сервер молча не ответит).   -  person greenapps    schedule 24.02.2018
comment
Вы можете сделать так, чтобы сервер обслуживал список URL-адресов, если вы называете его как http://<ipaddress:port>. или что-то еще. Используйте свою фантазию.   -  person greenapps    schedule 24.02.2018
comment
Звучит правдоподобно. Я попробую это сейчас.   -  person arjun    schedule 24.02.2018
comment
Это работает. Это также предполагает, что я инициализирую папки перед запуском сервера, верно? Потому что разрешение пути к папке в URI открывает доступ к системе. Нехорошо. Есть ли способ разрешить инициализацию нескольких путей к папкам во время запуска сервера? И если я просто использую эту технику, какие возможные злоупотребления я открываю, такие как блокировка потока, безопасность и т. Д. В основном, что еще я должен изучить/реализовать, чтобы иметь надежный метод?   -  person arjun    schedule 24.02.2018
comment
Я думал создать хеш-поиск разрешенных файлов. Когда указан uri, он сверяется с хэшем, и если он совпадает, то он обслуживается, в противном случае отклоняется. Это хорошо? или неэффективно?   -  person arjun    schedule 24.02.2018
comment
Почему недостаточно, чтобы запрошенный файл не существовал?   -  person greenapps    schedule 24.02.2018
comment
Да, я имел в виду исключение FileNotFoundException. Так что поиск хэша был бы достойной настройкой безопасности?   -  person arjun    schedule 24.02.2018
comment
Нет. Нет файла, не найденного исключения, но Файл: существует().   -  person greenapps    schedule 24.02.2018
comment
Я имел в виду только проверку тех файлов, которые находятся в массиве? Не просто любое имя файла, передаваемое в uri, и FileInputStream, пытающийся его получить. Только те, которые разрешены.   -  person arjun    schedule 24.02.2018
comment
Файлы не в массивах, а в папках. Если вы возьмете одну папку и поместите в нее все файлы, которые хотите обслужить, все готово.   -  person greenapps    schedule 24.02.2018
comment
Хорошо. Не могли бы вы подсказать или дать ссылку на ресурс, что настроить с сервером, чтобы его не использовали по назначению? Я хочу знать и, пожалуйста, напишите в качестве ответа. Я хочу принять это.   -  person arjun    schedule 24.02.2018
comment
Если вы хотите обслуживать только некоторые файлы из папки, настраивать нечего. И я не знаю, какое использование вы считаете злоупотреблением.   -  person greenapps    schedule 24.02.2018
comment
Ok. Так что спасибо за постоянную помощь. Ты замечательный!   -  person arjun    schedule 24.02.2018
comment
Когда я сказал о неправильном использовании, я имел в виду, что к системным файлам нет никакого доступа.   -  person arjun    schedule 24.02.2018