File Directory Navigation with Android Nanohttpd lightweight server

前端 未结 2 1791
[愿得一人]
[愿得一人] 2020-12-20 09:25

With the code below, i was able to create a mobile server on android phone with the Nanohttpd lightweight server. The code basically loop through the root directory of the h

相关标签:
2条回答
  • 2020-12-20 10:17

    You get URI in first parameter. So appending that to path with open specified directory. If you request 192.168.1.6:8080/ABC program will look for ABC folder in External directory.

    Then when check whether taken item is a file or directory & according to which we change our output. using

    .isFile()
    

    Below is code which should work :

     ....
     public Response serve(String uri, Method method,
                    Map<String, String> header, Map<String, String> parameters,
                    Map<String, String> files) {
    
                File rootDir = new File( Environment.getExternalStorageDirectory() +  File.separator  + uri);
                File[] files2 = rootDir.listFiles();
                String answer = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title>sdcard0 - TECNO P5 - WiFi File Transfer Pro</title>";
                for (File detailsOfFiles : files2) {
                    if(detailsOfFiles.isFile()){
                            answer += detailsOfFiles.getAbsolutePath() + "<br>";
                    }else{
                    answer += "<a href=\"" + detailsOfFiles.getAbsolutePath()
                            + "\" alt = \"\">" + detailsOfFiles.getAbsolutePath()
                            + "</a><br>";
                            }
                }
                answer += "</head></html>";
                return new NanoHTTPD.Response(answer);
     }
    ...
    

    Sorry for bad explanation.

    0 讨论(0)
  • 2020-12-20 10:24

    i finally figure out how to do this after enough time of studying the NanoHTTPD Framework.The code below helps me to navigate within the directories in the host android device:

    @Override
            public Response serve(String uri, Method method,
                    Map<String, String> header, Map<String, String> parameters,
                    Map<String, String> files) {
                File rootDir = Environment.getExternalStorageDirectory();
                File[] filesList = null;
                String filepath = "";
                if (uri.trim().isEmpty()) {
                    filesList = rootDir.listFiles();
                } else {
                    filepath = uri.trim();
                }
                filesList = new File(filepath).listFiles();
                String answer = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"><title>sdcard0 - TECNO P5 - WiFi File Transfer Pro</title>";
                if (new File(filepath).isDirectory()) {
                    for (File detailsOfFiles : filesList) {
                        answer += "<a href=\"" + detailsOfFiles.getAbsolutePath()
                                + "\" alt = \"\">"
                                + detailsOfFiles.getAbsolutePath() + "</a><br>";
                    }
                } else {
                }
                answer += "</head></html>" + "uri: " + uri + " \nfiles " + files
                        + " \nparameters " + parameters + " \nheader ";
                return new NanoHTTPD.Response(answer);
            }
    

    the uri parameter in the Response Method contains browser url at that point in time: Example if url displaying on the address bar is: /192.168.43.1:8080/storage/sdcard1/Smadav_2012_Rev._9.0, then uri contains /storage/sdcard1/Smadav_2012_Rev._9.0. What i did is to just pass the uri as a filepath and of course, this is not the case for first connection when the uri is empty.

    0 讨论(0)
提交回复
热议问题