NanoHTTPD 提供空文件
NanoHTTPD serves empty file
我正在尝试将 Google 投射功能添加到我的媒体应用程序中,该应用程序主要处理本地 存储的媒体。由于投射接收器无法直接访问存储在设备本地的文件,我正在使用 NanoHTTPD 运行 一个简单的网络服务器,基本上只是提供我需要投射接收器的内容的 FileInputStream加载。
这将确定为一个简单的 URL,包括 phone 的内网 IP 地址,以及在 NanoHTTPD 子类的构造函数中指定的端口。但是,这不会发生。相反,似乎服务结果是一个空流,因此是一个空文件,而设备上的实际文件被证明是存在的并且非空的(它可以被应用程序本身读取)。
NanoHTTPD 子类:
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; }
}
}
您是如何尝试访问 NanoHTTPD 启动的服务器的?要穿过所有 T 并点上所有 i,请确保:
NanoHTTPD 在服务线程上。
提供一个简单的 helloworld.html 来测试一下。
最好使用 WebView 来查看,而不是专用应用程序。
请求访问网络的权限。
除了 WebView,如果可用的话,使用另一个实际设备来访问这个一次性服务器。
我在之前的项目中遇到过这个问题。我也是从 NanoHTTPD 开始的,但我不记得究竟是什么以及为什么我必须更改它以使用 Cast 设备。不过,你可以看看我的版本:https://github.com/entertailion/Caster/blob/master/src/com/entertailion/java/caster/HttpServer.java
我正在尝试将 Google 投射功能添加到我的媒体应用程序中,该应用程序主要处理本地 存储的媒体。由于投射接收器无法直接访问存储在设备本地的文件,我正在使用 NanoHTTPD 运行 一个简单的网络服务器,基本上只是提供我需要投射接收器的内容的 FileInputStream加载。
这将确定为一个简单的 URL,包括 phone 的内网 IP 地址,以及在 NanoHTTPD 子类的构造函数中指定的端口。但是,这不会发生。相反,似乎服务结果是一个空流,因此是一个空文件,而设备上的实际文件被证明是存在的并且非空的(它可以被应用程序本身读取)。
NanoHTTPD 子类:
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; }
}
}
您是如何尝试访问 NanoHTTPD 启动的服务器的?要穿过所有 T 并点上所有 i,请确保:
NanoHTTPD 在服务线程上。
提供一个简单的 helloworld.html 来测试一下。
最好使用 WebView 来查看,而不是专用应用程序。
请求访问网络的权限。
除了 WebView,如果可用的话,使用另一个实际设备来访问这个一次性服务器。
我在之前的项目中遇到过这个问题。我也是从 NanoHTTPD 开始的,但我不记得究竟是什么以及为什么我必须更改它以使用 Cast 设备。不过,你可以看看我的版本:https://github.com/entertailion/Caster/blob/master/src/com/entertailion/java/caster/HttpServer.java