Java:从web服务器发送文件(XML)到另一台服务器

问题描述:

我有一个简单的问题关于从我的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

我建议你使用HTTP,而不是原始套接字。它将处理超时,组块,编码等。

看看commons http library(以前称为http-client),它会为您节省编写自己的代码。

+0

谢谢@artbristol,我会看看http-client。我知道这是我发送XML文件的最佳方式。问候:) – Aleix

+0

哦,首先我虽然在谈论commons-httpclient3库,但我刚刚意识到这已经过时了。我明白,如果我使用Apache HttpClient4库,那么更好? – Aleix

+0

是的,v4是一个尝试 – artbristol

我看看如何通过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(); 
    } 
}