2013-03-20 75 views
0

我正在使用HTTP請求將數據從一臺服務器發送到另一臺服務器。一切工作都很好,但我不知道如何發送文件(從一臺服務器上傳到另一臺服務器)。Servlet通過郵件上載文件

我已經看了一些例子,但我也需要能夠發送一個字符串(文件ID)與文件一起。

該請求是從該類的POST方法中的Java類發送的。是這樣的:客戶端發送帶有ID的文件的上傳請求到存儲服務器。該存儲服務器然後將該文件上傳到另一個存儲服務器...因此,從該服務器的POST方法發送從第一個服務器到另一個服務器的POST請求。

任何示例代碼或鏈接正確的方向非常感謝。

+0

看看http://stackoverflow.com/questions/2422468/how-to-upload-files-to-server-using- jsp-servlet – Grim 2013-03-20 19:11:39

+0

這是通過網頁中的表單完成的。我沒有任何形式或類似的東西。 – 2013-03-20 19:15:56

+0

你需要客戶端,服務器端還是兩者? – Moesio 2013-03-20 19:22:20

回答

0

發現此tutorial您如何使用HttpClient發送多部分數據。看一看

0

The Commons FileUpload包使您可以輕鬆地爲servlet和Web應用程序添加強大的高性能文件上載功能。

FileUpload解析符合RFC 1867「基於表單的HTML文件上傳」的HTTP請求。也就是說,如果HTTP請求是使用POST方法提交的,並且內容類型爲「multipart/form-data」,則FileUpload可以解析該請求,並以調用方容易使用的方式提供結果here

請參閱this 鏈接可以幫助您更多。

既然你說 -

「我也需要能夠與 文件一起發送一個字符串(文件ID)」

你將不得不解析HTTP請求並檢查FileItem是否是一個表單字段(字符串/文本 - 在您的案例中的文件ID) 並相應地處理它。

這裏是多內容的請求的代碼示例 -

boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
     FileItemFactory factory = new DiskFileItemFactory(); 
     FileItem item=null; 
     ServletFileUpload servletFileUpload = new ServletFileUpload(factory); 
     servletFileUpload.setSizeMax(-1); 

     List items =null; 
     if (isMultipart) { 
      try 
      { 
       items = servletFileUpload.parseRequest(request); 
       Iterator iter = items.iterator(); 
       while (iter.hasNext()) { 
        item = (FileItem) iter.next();     
        if (item.isFormField()) 
        { 
//get your file Id from element to match with item.getFieldName() and do whatever you want 
} 
else if (!item.isFormField()){ 
//save your file here 
} 

希望幫助你。

+0

從http://commons.apache.org/proper/commons-fileupload// – NickJ 2013-03-21 11:14:47

+0

複製並粘貼@NickJ - 我已經在我的答案(commons-fileupload的鏈接)中提到過,它實際上是在那裏描述的;-)其餘部分我試圖自己解釋,我真的希望這對他有幫助。 – Mohsin 2013-03-21 13:19:37

+0

嗨!回覆晚了,請原諒。我會研究你描述的方法。起初看起來似乎是我想要的。我會跟上你:) – 2013-03-24 09:27:40