我正在尝试用Java创建一个可以提供可搜索音频文件的文件服务器。但我在Google Chrome html5音频播放器中找不到我提供的文件。当我向前寻求时它什么也不做(即使是在下载的内容上),如果向后搜索太多则从头开始。如果我从不同的位置加载文件(http://www.vorbis.com/music/Epoq-Lepidoptera.ogg),那么它是可以搜索的。
这是我的服务器代码
package com.company;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import java.io.*;
import java.net.InetSocketAddress;
public class Main {
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/Epoq-Lepidoptera.ogg", new MyHandler());
server.setExecutor(null); // creates a default executor
server.start();
}
static class MyHandler implements HttpHandler {
public void handle(HttpExchange httpExchange) throws IOException {
long contentLength;
File file = new File("Epoq-Lepidoptera.ogg");
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
contentLength = file.length();
System.out.println(contentLength);
Headers headers = httpExchange.getResponseHeaders();
headers.add("content-type", "audio/ogg");
// ok, we are ready to send the response.
httpExchange.sendResponseHeaders(200, contentLength);
OutputStream os = httpExchange.getResponseBody();
byte[] data = new byte[1000];
while (true) {
int bytesRead = bis.read(data);
if (bytesRead == -1) break;
os.write(data, 0, bytesRead);
}
os.close();
System.out.println("request served");
}
}
}
我正在使用此html文件来测试音频。
<html>
<body>
<audio controls="control" preload="auto" src="http://localhost:8000/Epoq-Lepidoptera.ogg"></audio>
</body>
</html>
但是以下文件是可以搜索的
<html>
<body>
<audio controls="control" preload="auto" src="http://www.vorbis.com/music/Epoq-Lepidoptera.ogg"></audio>
</body>
</html>
我做错了什么或我应该在我的服务器中实现什么才能使文件可搜索,最少下载内容(在白条中显示)
此问题仅适用于Google Chrome,而不适用于Firefox。 Firefox可以搜索加载的内容。