2011-06-20 50 views
0

我有一個簡單的問題關於從我的webapp服務器發送文件(XML文件)到另一臺服務器與Java(struts2框架)Java:從web服務器發送文件(XML)到另一臺服務器

希望有人可以給看看我的代碼,因爲這是不可能的,我來檢查代碼將工作 - 其他服務器(一個具有接收文件)仍然沒有實現。而且我必須準備好我的webapp服務器以最準確的方式發送文件。

我有一個XML文件路徑,服務器地址和端口由Spring框架填充。

看看互聯網中的一些例子,以及在這個真棒網站的一些其他問題,我試圖寫一個簡單的代碼發送我的文件到給定的地址。 這是代碼:

private String server; 
private Integer port; 

// getters and settlers methods for server and port properties 

public void sendXML(String fileName) throws Exception{ 
    try{ 
     Socket socket = new Socket(server, port); 

     File file = new File(fileName); 

     FileInputStream fis = new FileInputStream(file); 

     OutputStream os = socket.getOutputStream(); 

     byte [] bytearray = new byte [(int)file.length()]; 
     BufferedInputStream bis = new BufferedInputStream(fis); 
     bis.read(bytearray,0,bytearray.length); 
     os.write(bytearray,0,bytearray.length); 
     os.flush(); 
     socket.close(); 

    } 
    catch(IOException e){ 
     e.printStackTrace(); 
    } 

} 

所以,我會很感激,如果有人可以給看看我的代碼,並告訴我,如果你認爲它不會工作。如果你認爲還有另一種更好的辦法,我也會很感激它。

謝謝你的人,你總是真真正有用的;)

問候,

Aleix

+0

'byte [] bytearray = new byte [(int)file.length()];''是一個壞主意。文件可能大於Integer.MAX_VALUE; –

+0

感謝您的建議,現在我正在嘗試實施發送槽Apache HttpClient4庫。 Regards – Aleix

回答

3

我建議你使用HTTP,而不是原始套接字。它將處理超時,組塊,編碼等。

看看commons http library(以前稱爲http-client),它會爲您節省編寫自己的代碼。

+0

謝謝@artbristol,我會看看http-client。我知道這是我發送XML文件的最佳方式。問候:) – Aleix

+0

哦,首先我雖然在談論commons-httpclient3庫,但我剛剛意識到這已經過時了。我明白,如果我使用Apache HttpClient4庫,那麼更好? – Aleix

+0

是的,v4是一個嘗試 – artbristol

0

我看看如何通過HTTP與Apache HttpClient4和HttpCore4庫做到這一點,我已經寫了這段代碼,你認爲它會正常工作?非常感謝你!

private String server; 
//private Integer port; 

// getter and settler methods for server property 

public void sendXML(String fileName) throws Exception{ 
    try{ 
     File file = new File(fileName); 
     FileEntity entity = new FileEntity(file, "text/xml; charset=\"UTF-8\""); 
     DefaultHttpClient httpclient = new DefaultHttpClient(); 
     HttpPost method = new HttpPost(server); 
     method.setEntity(entity); 
     HttpResponse response = httpclient.execute(method); 
    } 
    catch(IOException e){ 
     e.printStackTrace(); 
    } 
} 
相關問題