我如何使任何计算机上的本地文件作为可下载文件与URL。客户端java应用程序将访问该URL以下载文件。
kuhbmx9i1#
您可以使用Jetty服务器。很容易将其嵌入到Java SE应用程序中。你可以在这里找到更多信息:http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty我认为您会对配置文件服务器一节特别感兴趣:http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty#Configuring_a_File_Server这里有一个例子,你可以在那里找到:
public class FileServer { public static void main(String[] args) throws Exception { Server server = new Server(); SelectChannelConnector connector = new SelectChannelConnector(); connector.setPort(8080); server.addConnector(connector); ResourceHandler resource_handler = new ResourceHandler(); resource_handler.setDirectoriesListed(true); resource_handler.setWelcomeFiles(new String[]{ "index.html" }); resource_handler.setResourceBase("."); HandlerList handlers = new HandlerList(); handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() }); server.setHandler(handlers); server.start(); server.join(); } }
如果你配置resourceBase到你的文件夹路径如下:resource_handler.setResourceBase("/path/to/your/folder"),则此文件夹中的所有文件都可以通过HTTP访问。
resourceBase
resource_handler.setResourceBase("/path/to/your/folder")
4ioopgfo2#
锁定,本次有disputes about this answer’s content正在解析。它目前不接受新的交互。
从Java 1.6开始,JDK中包含了一个内置的HTTP服务器。此代码用于设置一个简单的http服务器以获取特定的PDF(请求为http://localhost:8000/get)
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import com.sun.net.httpserver.Headers; public class SimpleHttpServer { public static void main(String[] args) throws Exception { HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0); server.createContext("/info", new InfoHandler()); server.createContext("/get", new GetHandler()); server.setExecutor(null); // creates a default executor server.start(); } static class InfoHandler implements HttpHandler { public void handle(HttpExchange t) throws IOException { String response = "Use /get to download a PDF"; t.sendResponseHeaders(200, response.length()); OutputStream os = t.getResponseBody(); os.write(response.getBytes()); os.close(); } } static class GetHandler implements HttpHandler { public void handle(HttpExchange t) throws IOException { // add the required response header for a PDF file Headers h = t.getResponseHeaders(); h.add("Content-Type", "application/pdf"); // a PDF (you provide your own!) File file = new File ("c:/temp/doc.pdf"); byte [] bytearray = new byte [(int)file.length()]; FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis); bis.read(bytearray, 0, bytearray.length); // ok, we are ready to send the response. t.sendResponseHeaders(200, file.length()); OutputStream os = t.getResponseBody(); os.write(bytearray,0,bytearray.length); os.close(); } } }
kx1ctssn3#
创建一个Java服务器,如果你在路由器/代理/防火墙后面,如果你从互联网外部访问它,一定要暴露它,如果不是,如果你在同一个子网里,那么忽略这个考虑。在Java服务器上,让它侦听特定端口,并在这个预定的协议端口上处理来自自定义Java客户端的TCP调用,以交换数据。然后让Java服务器使用System.IO调用或类似的方法将文件作为字节流提供给客户机。Java服务器最好是LAMP或Jetty或任何基于Java的小型服务器,因此您不必从头开始。希望这能帮上忙。
t2a7ltrp4#
您可以设置一个Web服务器。Java Web服务器:
当然,如果你在路由器后面,你将需要将端口80转发到你的计算机。
4条答案
按热度按时间kuhbmx9i1#
您可以使用Jetty服务器。很容易将其嵌入到Java SE应用程序中。你可以在这里找到更多信息:
http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty
我认为您会对配置文件服务器一节特别感兴趣:
http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty#Configuring_a_File_Server
这里有一个例子,你可以在那里找到:
如果你配置
resourceBase
到你的文件夹路径如下:resource_handler.setResourceBase("/path/to/your/folder")
,则此文件夹中的所有文件都可以通过HTTP访问。4ioopgfo2#
锁定,本次有disputes about this answer’s content正在解析。它目前不接受新的交互。
从Java 1.6开始,JDK中包含了一个内置的HTTP服务器。
此代码用于设置一个简单的http服务器以获取特定的PDF(请求为http://localhost:8000/get)
kx1ctssn3#
创建一个Java服务器,如果你在路由器/代理/防火墙后面,如果你从互联网外部访问它,一定要暴露它,如果不是,如果你在同一个子网里,那么忽略这个考虑。
在Java服务器上,让它侦听特定端口,并在这个预定的协议端口上处理来自自定义Java客户端的TCP调用,以交换数据。然后让Java服务器使用System.IO调用或类似的方法将文件作为字节流提供给客户机。
Java服务器最好是LAMP或Jetty或任何基于Java的小型服务器,因此您不必从头开始。
希望这能帮上忙。
t2a7ltrp4#
您可以设置一个Web服务器。
Java Web服务器:
当然,如果你在路由器后面,你将需要将端口80转发到你的计算机。