2011-01-28 42 views
1

如何在任何可用的計算機上創建本地文件作爲具有URL的可下載文件。該URL將被客戶端Java應用程序訪問以下載文件。使用URL創建可下載的文件

+1

你想要做什麼?你想讓文件可以從其他計算機的Java應用程序訪問嗎? – Teknophilia 2011-01-28 21:58:13

+0

文件將需要在客戶端應用程序之間傳輸。像P2P一樣,但只有1到1個文件傳輸。我將無法在使用此應用程序的所有計算機上設置HTTP服務器! – 2011-01-28 22:19:01

回答

2

可以使用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訪問。

0

創建一個Java服務器,一定要揭露它,如果你是一個路由器/代理/防火牆後面,如果你從外部互聯網訪問它,如果沒有,如果你在同一個子網是那麼它的罰款忽略這個考慮。

在Java服務器,讓它偵聽到特定端口和處理TCP從定製的Java客戶端調用該規定同意端口上進行數據交換。然後讓Java服務器使用System.IO調用或類似服務將文件作爲字節流發送到客戶端。

Java服務器優選可以說LAMP或Jetty或精縮基於Java的服務器實際上,這樣你就不必從頭開始。

希望這會有所幫助。

-1

您可以設置一個網絡服務器。

一個Java Web服務器:

當然,如果你是一個路由器之後,您將需要80端口轉發到您的計算機。

+0

對不起,什麼?一個URL可以識別幾十個方案/協議中的任何一個,即:ftp \://ftp.uiuc.edu是一個有效的URL,但不使用http。 – Kylar 2011-02-06 02:20:03

2

由於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(); 
    } 
    } 
} 

裁判:http://www.rgagnon.com/javadetails/java-have-a-simple-http-server.html