2011-01-28 12 views
1

どのコンピュータでもローカルファイルをダウンロード可能なファイルとしてURLで作成するにはどうすればよいですか。 URLは、クライアントJavaアプリケーションがファイルをダウンロードするためにアクセスします。ダウンロード可能なファイルをURLで作成する

+1

正確に何をしますか?他のコンピュータのJavaアプリケーションからファイルにアクセスできるようにしますか? – Teknophilia

+0

クライアントアプリケーション間でファイルを転送する必要があります。 P2Pと同様ですが、ファイル転送は1対1です。このアプリケーションを使用しているすべてのコンピュータでHTTPサーバーをセットアップすることはできません! –

答えて

2

あなたは桟橋サーバーを使用することができます。 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サーバーでは、特定のポートをリッスンし、データを交換するためにこの所定の合意されたポートでカスタムJavaクライアントからのTCP呼び出しを処理します。次に、JavaサーバーにSystem.IOコールなどを使用してファイルをバイトストリームとしてクライアントに送信します。

Javaサーバーは、LAMPまたはJetty、またはJavaベースのサーバーを実際に縮小したものであることができます。したがって、最初から始める必要はありません。

これが役に立ちます。

-1

ウェブサーバーを設定できます。

AのJava Webサーバ:

あなたがルータの背後にある場合は、お使いのコンピュータにポート80を転送する必要があります。

+0

申し訳ありません、何ですか? URLは何十ものスキーム/プロトコルのどれかを特定できます。つまり、ftp \://ftp.uiuc.eduは有効なURLですが、httpは使用しません。 – Kylar

+0

@Kylar:確かに!イエス・キリスト、答えた瞬間の私の割合はどこでしたか? –

2

Java 1.6以降、JDKに組み込まれているHTTPサーバーが組み込まれています。

このコードは(リクエストhttp://localhost:8000/get付き)特定のPDFファイルを取得するには、単純なHTTPサーバの設定に使用されている

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

+0

ニート - それはJava 1.6であったことを知らなかった!また、関連するノートでは、Java 1.0.xからRealのHowToサイトを使用しています。それは素晴らしいリソースです。 – shadit

関連する問題