NanoHTTPD 提供空文件

Posted

技术标签:

【中文标题】NanoHTTPD 提供空文件【英文标题】:NanoHTTPD serves empty file 【发布时间】:2016-02-13 22:29:37 【问题描述】:

我正在尝试将 Google Cast 功能添加到我的一个媒体应用程序中,该应用程序主要处理本地存储的媒体。由于投射接收器无法直接访问设备上本地存储的文件,因此我使用 NanoHTTPD 运行一个简单的网络服务器,基本上只是提供我需要投射接收器加载的内容的 FileInputStream。

这将确定为一个简单的 URL,由电话的 Intranet IP 地址以及 NanoHTTPD 子类的构造函数中指定的端口组成。然而,这并没有发生。相反,服务结果似乎是一个空流,因此是一个空文件,而设备上的实际文件被证明是存在且非空的(它可以由应用程序本身读取)。

NanoHTTTPD 子类:

package de.julianostarek.musicplayer.Server;


import android.util.Log;
import android.widget.Toast;

import java.io.FileInputStream;
import java.util.Map;

import fi.iki.elonen.NanoHTTPD;


/**
 * Created by Julian Os on 13.02.2016.
 */
public class LocalServer extends NanoHTTPD 
    public static final String TAG = "LocalServer.class";

    public LocalServer(int port) 
        super(port);
    

    public LocalServer(String hostname, int port) 
        super(hostname, port);
        Log.e(TAG, hostname + ":" + port);
    

    @Override
    public Response serve(IHTTPSession session) 
        try 
            return new Response(Response.Status.OK, "audio/flac", session.getInputStream());
        catch (Exception e) 
            Log.e(TAG, "Serving failed: " + e.toString()); return null; 
    


【问题讨论】:

请显示您使用的完整网址。 那不是网址。而不是我问的。 我问你客户端使用的是哪个url。 【参考方案1】:

我在之前的项目中遇到过这个问题。我也是从 NanoHTTPD 开始的,但我不记得究竟是什么以及为什么我必须更改它以使用 Cast 设备。不过,你可以看看我的版本:https://github.com/entertailion/Caster/blob/master/src/com/entertailion/java/caster/HttpServer.java

【讨论】:

【参考方案2】:

您是如何尝试访问 NanoHTTPD 启动的服务器的?跨越所有 T 并点所有 i 确保:

NanoHTTPD 在服务线程上。

提供一个简单的 helloworld.html 来测试它。

最好使用WebView来查看,而不是专门的app。

请求访问网络的权限。

在 WebView 之外,使用另一个实际设备(如果可用)来访问这个一次性服务器。

【讨论】:

我要从桌面的 chrome 访问文件,它是在服务中启动的

以上是关于NanoHTTPD 提供空文件的主要内容,如果未能解决你的问题,请参考以下文章

安卓端简易服务器Nanohttpd使用方法

xml 使用NanoHTTPD的Android简单Web服务器(http://elonen.iki.fi/code/nanohttpd)

如何开发自己的HttpServer-NanoHttpd源码解读

使用NanoHttpd实现简易WebServer

如何在 AWS 上托管 nanohttpd java 应用程序?

Android NANOHTTPD 问题?