HttpClient通過Post上傳文件(轉)

在之前一段的項目中,使用Java模仿Http Post方式發送參數以及文件,單純的傳遞參數或者文件可以使用URLConnection進行相應的處理。

????????? 但是項目中涉及到既要傳遞普通參數,也要傳遞多個文件(不是單純的傳遞XML文件)。在網上尋找之后,發現是使用HttClient來進行響應的操作,起初嘗試多次依然不能傳遞參數和傳遞文件,后來發現時因為當使用HttpClient時,不能使用request.getParameter()對普通參數進行獲取,而要在服務器端使用Upload來進行操作。

????????? HttpClient4.2 jar下載 :http://download.csdn.net/detail/just_szl/4370574

???????? 客戶端代碼:

?

[java]?view plaincopy
  1. import?java.io.ByteArrayOutputStream;??
  2. import?java.io.File;??
  3. import?java.io.IOException;??
  4. import?java.io.InputStream;??
  5. import?org.apache.http.HttpEntity;??
  6. import?org.apache.http.HttpResponse;??
  7. import?org.apache.http.HttpStatus;??
  8. import?org.apache.http.ParseException;??
  9. import?org.apache.http.client.HttpClient;??
  10. import?org.apache.http.client.methods.HttpPost;??
  11. import?org.apache.http.entity.mime.MultipartEntity;??
  12. import?org.apache.http.entity.mime.content.FileBody;??
  13. import?org.apache.http.impl.client.DefaultHttpClient;??
  14. import?org.apache.http.util.EntityUtils;??
  15. ??
  16. /**?
  17. ?*??
  18. ?*?@author?<a?href="mailto:just_szl@hotmail.com">?Geray</a>?
  19. ?*?@version?1.0,2012-6-12??
  20. ?*/??
  21. public?class?HttpPostArgumentTest2?{??
  22. ??
  23. ????//file1與file2在同一個文件夾下?filepath是該文件夾指定的路徑??????
  24. ????public?void?SubmitPost(String?url,String?filename1,String?filename2,?String?filepath){??
  25. ??????????
  26. ????????HttpClient?httpclient?=?new?DefaultHttpClient();??
  27. ??????????
  28. ????????try?{??
  29. ??????
  30. ????????????HttpPost?httppost?=?new?HttpPost(url);??
  31. ??????????????
  32. ????????????FileBody?bin?=?new?FileBody(new?File(filepath?+?File.separator?+?filename1));??
  33. ????????????????
  34. ????????????FileBody?bin2?=?new?FileBody(new?File(filepath?+?File.separator?+?filename2));??
  35. ??????????????
  36. ????????????StringBody?comment?=?new?StringBody(filename1);??
  37. ??
  38. ????????????MultipartEntity?reqEntity?=?new?MultipartEntity();??
  39. ??????????????
  40. ????????????reqEntity.addPart("file1",?bin);//file1為請求后臺的File?upload;屬性??????
  41. ?????????????reqEntity.addPart("file2",?bin2);//file2為請求后臺的File?upload;屬性??
  42. ?????????????reqEntity.addPart("filename1",?comment);//filename1為請求后臺的普通參數;屬性?????
  43. ????????????httppost.setEntity(reqEntity);??
  44. ??????????????
  45. ????????????HttpResponse?response?=?httpclient.execute(httppost);??
  46. ??????????????
  47. ??????????????????
  48. ????????????int?statusCode?=?response.getStatusLine().getStatusCode();??
  49. ??????????????
  50. ??????????????????
  51. ????????????if(statusCode?==?HttpStatus.SC_OK){??
  52. ??????????????????????
  53. ????????????????System.out.println("服務器正常響應.....");??
  54. ??????????????????
  55. ????????????????HttpEntity?resEntity?=?response.getEntity();??
  56. ??????????????????
  57. ??????????????????
  58. ????????????????System.out.println(EntityUtils.toString(resEntity));//httpclient自帶的工具類讀取返回數據??
  59. ??????????????????
  60. ??????????????????
  61. ??????????????????
  62. ????????????????System.out.println(resEntity.getContent());?????
  63. ??
  64. ????????????????EntityUtils.consume(resEntity);??
  65. ????????????}??
  66. ??????????????????
  67. ????????????}?catch?(ParseException?e)?{??
  68. ????????????????//?TODO?Auto-generated?catch?block??
  69. ????????????????e.printStackTrace();??
  70. ????????????}?catch?(IOException?e)?{??
  71. ????????????????//?TODO?Auto-generated?catch?block??
  72. ????????????????e.printStackTrace();??
  73. ????????????}?finally?{??
  74. ????????????????try?{???
  75. ????????????????????httpclient.getConnectionManager().shutdown();???
  76. ????????????????}?catch?(Exception?ignore)?{??
  77. ??????????????????????
  78. ????????????????}??
  79. ????????????}??
  80. ????????}??
  81. ??????
  82. ??????
  83. ????/**?
  84. ?????*?@param?args?
  85. ?????*/??
  86. ????public?static?void?main(String[]?args)?{??
  87. ????????//?TODO?Auto-generated?method?stub??
  88. ??????????
  89. ????????HttpPostArgumentTest2?httpPostArgumentTest2?=?new?HttpPostArgumentTest2();??
  90. ??????????
  91. ????????httpPostArgumentTest2.SubmitPost("http://127.0.0.1:8080/demo/receiveData.do",??
  92. ????????????????"test.xml","test.zip","D://test");??
  93. ????}??
  94. ??????
  95. }??

服務端代碼:

?

?

[java]?view plaincopy
  1. public?void?receiveData(HttpServletRequest?request,?HttpServletResponse?response)?throws?AppException{??
  2. ??
  3. ????????PrintWriter?out?=?null;??
  4. ????????response.setContentType("text/html;charset=UTF-8");??
  5. ??????????
  6. ????????Map?map?=?new?HashMap();??
  7. ????????FileItemFactory?factory?=?new?DiskFileItemFactory();??
  8. ????????ServletFileUpload?upload?=?new?ServletFileUpload(factory);??
  9. ????????File?directory?=?null;????
  10. ????????List<FileItem>?items?=?new?ArrayList();??
  11. ????????try?{??
  12. ????????????items?=?upload.parseRequest(request);??
  13. ????????????//?得到所有的文件??
  14. ????????????Iterator<FileItem>?it?=?items.iterator();??
  15. ????????????while?(it.hasNext())?{??
  16. ????????????????FileItem?fItem?=?(FileItem)?it.next();??
  17. ????????????????String?fName?=?"";??
  18. ????????????????Object?fValue?=?null;??
  19. ????????????????if?(fItem.isFormField())?{?//?普通文本框的值??
  20. ????????????????????fName?=?fItem.getFieldName();??
  21. //??????????????????fValue?=?fItem.getString();??
  22. ????????????????????fValue?=?fItem.getString("UTF-8");??
  23. ????????????????????map.put(fName,?fValue);??
  24. ????????????????}?else?{?//?獲取上傳文件的值??
  25. ????????????????????fName?=?fItem.getFieldName();??
  26. ????????????????????fValue?=?fItem.getInputStream();??
  27. ????????????????????map.put(fName,?fValue);??
  28. ????????????????????String?name?=?fItem.getName();??
  29. ????????????????????if(name?!=?null?&&?!("".equals(name)))?{??
  30. ????????????????????????name?=?name.substring(name.lastIndexOf(File.separator)?+?1);??
  31. ??????????????????????????
  32. //??????????????????????String?stamp?=?StringUtils.getFormattedCurrDateNumberString();??
  33. ????????????????????????String?timestamp_Str?=?TimeUtils.getCurrYearYYYY();??
  34. ????????????????????????directory?=?new?File("d://test");????
  35. ?????????????????????????????directory.mkdirs();??
  36. ??????????????????????????
  37. ????????????????????????String?filePath?=?("d://test")+?timestamp_Str+?File.separator?+?name;??
  38. ????????????????????????map.put(fName?+?"FilePath",?filePath);??
  39. ??????????????????????????
  40. ????????????????????????InputStream?is?=?fItem.getInputStream();??
  41. ????????????????????????FileOutputStream?fos?=?new?FileOutputStream(filePath);??
  42. ????????????????????????byte[]?buffer?=?new?byte[1024];??
  43. ????????????????????????while?(is.read(buffer)?>?0)?{??
  44. ????????????????????????????fos.write(buffer,?0,?buffer.length);??
  45. ????????????????????????}??
  46. ????????????????????????fos.flush();??
  47. ????????????????????????fos.close();??
  48. ????????????????????????map.put(fName?+?"FileName",?name);??
  49. ????????????????????}??
  50. ????????????????}??
  51. ????????????}??
  52. ????????}?catch?(Exception?e)?{??
  53. ????????????System.out.println("讀取http請求屬性值出錯!");??
  54. //??????????e.printStackTrace();??
  55. ????????????logger.error("讀取http請求屬性值出錯");??
  56. ????????}??
  57. ??????????
  58. ????????//?數據處理??
  59. ??????????
  60. ??????????
  61. ??????????
  62. ??????????
  63. ????????try?{??
  64. ????????????out?=?response.getWriter();??
  65. ????????????out.print("{success:true,?msg:'接收成功'}");??
  66. ????????????out.close();??
  67. ????????}?catch?(IOException?e)?{??
  68. ????????????e.printStackTrace();??
  69. ????????}??
  70. ??
  71. ??
  72. ????}??



http://blog.csdn.net/Just_szl/article/details/7659347

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458172.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458172.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458172.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數字圖像處理:各種變換濾波和噪聲的類型和用途總結

摘自http://imgtec.eetrend.com/blog/4564 一、基本的灰度變換函數 1.1圖像反轉 適用場景&#xff1a;增強嵌入在一幅圖像的暗區域中的白色或灰色細節&#xff0c;特別是當黑色的面積在尺寸上占主導地位的時候。 1.2對數變換&#xff08;反對數變換與其相反&#xff09; …

Java 開發環境部署

1.下載Java開發環境工具包JDK&#xff0c;下載地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html 下載后&#xff0c;雙擊jdk應用程序&#xff0c;根據提示完成安裝&#xff0c;安裝過程中可以自定義安裝目錄等信息&#xff0c;這里我選擇…

枚舉enum、NS_ENUM 、NS_OPTIONS

2019獨角獸企業重金招聘Python工程師標準>>> enum 了解位移枚舉之前&#xff0c;我們先回顧一下C語言位運算符。 1 << : 左移,比如1<<n,表示1往左移n位&#xff0c;即數值大小2的n次方; 例如 : 0b0001 << 1 變為了 0b0010 2 >> : 右…

mysql 關鍵詞相關度排序方法詳細示例分析

http://www.jb51.net/article/40480.htm轉載于:https://www.cnblogs.com/lixiuran/p/5299305.html

數字圖像處理-頻率域濾波原理

from&#xff1a;https://blog.csdn.net/forrest02/article/details/55510711?locationNum15&fps1 寫在前面的話 作者是一名在讀的碩士研究僧&#xff0c;方向是圖像處理。由于圖像處理是一門相對復雜的學科&#xff0c;作者在課堂上學到的東西只是非常淺顯的內容&#…

tomcat優化-有改protocol 和 緩存 集群方案

tomcat優化 在線上環境中我們是采用了tomcat作為Web服務器&#xff0c;它的處理性能直接關系到用戶體驗&#xff0c;在平時的工作和學習中&#xff0c;歸納出以下七種調優經驗。 1. 服務器資源 服務器所能提供CPU、內存、硬盤的性能對處理能力有決定性影響。 (1) 對于高并發…

深入淺出的講解傅里葉變換(真正的通俗易懂)

原文出處&#xff1a; 韓昊 1 2 3 4 5 6 7 8 9 10 作 者&#xff1a;韓 昊 知 乎&#xff1a;Heinrich 微 博&#xff1a;花生油工人 知乎專欄&#xff1a;與時間無關的故事 謹以此文獻給大連海事大學的吳楠老師&#xff0c;柳曉鳴老師&#xff0c;王新年老師以及張晶泊老…

分布式鎖 基于Redis

分布式鎖的實現(基于Redis)參考:http://www.jb51.net/article/75439.htm http://www.linuxidc.com/Linux/2015-01/111827.htm http://www.tuicool.com/articles/6juqmm7 方式一: 基于第三方類庫 redssion 1.安裝redis安裝redssion的鎖服務隊redis的版本有要求&#xff0c;要求必…

學好Linux決心書

我叫李楊&#xff0c;經過在老男孩教育linux運維班5個月學習后&#xff0c;我一定要達到的的薪水目標是7k,為了達到此目標我將采取如下5大行動或方案&#xff1a;1.每天堅持學習7個小時2.堅持每天跑步1小時3.調整思路 嚴于利己4.讓自己生活更加充實&#xff0c;不在渾渾噩噩5.為…

如何通俗易懂地解釋歐拉公式(e^πi+1=0)?

from&#xff1a;https://www.zhihu.com/question/41134540 http://www.matongxue.com/madocs/8.html

IIS(1)

轉載&#xff1a;http://blog.csdn.net/ce123 IIS音頻總線學習&#xff08;一&#xff09;數字音頻技術 一、聲音的基本概念 聲音是通過一定介質傳播的連續的波。 圖1 聲波重要指標&#xff1a; 振幅&#xff1a;音量的大小周期&#xff1a;重復出現的時間間隔頻率&#xff1a;…

手機屏幕適配原理及實現

為什么80%的碼農都做不了架構師&#xff1f;>>> 手機屏幕是用戶與 App 最直接的交互點 不同的分辨率下用戶對我們的 App 具有明顯的感觀差異&#xff0c;主流分辨率的更新迭代卻又完全獨立于 App 進行。這讓我們想要使 App 在絕大多數主流手機上都保持感觀、體驗的…

【數字圖像處理】傅里葉變換在圖像處理中的應用

from&#xff1a;https://www.cnblogs.com/tenderwx/p/5245859.html 1.理解二維傅里葉變換的定義 1.1二維傅里葉變換 二維Fourier變換: 逆變換&#xff1a; 1.2二維離散傅里葉變換 一個圖像尺寸為MN的 函數的離散傅里葉變換由以下等式給出&#xff1a; 其中 和。其中變量u和…

最好的云備份選項

能夠實現數據備份的方式有很多。在虛擬化技術最為興盛的時期&#xff0c;首選方式是使用數據保護軟件&#xff0c;在hypervisor層進行備份或者復制整臺虛擬機&#xff0c;比如Veeam Backup以及Zerto提供的同步軟件。 對于使用VMware云的IT部門來說&#xff0c;這種方式現在仍然…

求二叉樹中兩個節點的最遠距離

問題定義如果我們把二叉樹看成一個圖&#xff0c;父子節點之間的連線看成是雙向的&#xff0c;我們姑且定義"距離"為兩節點之間邊的個數。寫一個程序求一棵二叉樹中相距最遠的兩個節點之間的距離。計算一個二叉樹的最大距離有兩個情況:情況A: 路徑經過左子樹的最深節…

halcon學習(算子匯總)

from:https://www.cnblogs.com/hanzhaoxin/archive/2013/01/09/2852213.html dev_clear_obj(Objects : : : ) 刪除一個iconic對象 dev_error_var( : : ErrorVar, Mode : ) 定義或取消定義一個錯誤變量 dev_get_exception_data( : : Exception, Name : Value) 獲取異常數據…

Bing Speech Recognition 標記

Bing Speech Services Bing Bing Speech Services provide speech capabilities for Windows and Windows Phone https://msdn.microsoft.com/en-us/library/dn303461.aspx 已失效。 轉載于:https://www.cnblogs.com/zangdalei/p/5312440.html

Source Insight 4.0 最簡單的破解安裝

from&#xff1a;https://blog.csdn.net/biubiuibiu/article/details/78044232 三步完成Source Insight 4.0 破解安裝 下載地址有更新&#xff0c;之前有朋友因潛在的版權問題封禁沒下到&#xff0c;現在更新后可正常使用了。 文末有完全清除上次安裝殘留的方法&#xff0c;…

【原】Spark中Master源碼分析(一)

Master作為集群的Manager&#xff0c;對于集群的健壯運行發揮著十分重要的作用。下面&#xff0c;我們一起了解一下Master是聽從Client&#xff08;Leader&#xff09;的號召&#xff0c;如何管理好Worker的吧。 1.家當&#xff08;靜態屬性&#xff09; 1.設置一個守護單線程的…

XML——XML介紹和基本語法

from&#xff1a;https://blog.csdn.net/gavin_john/article/details/51511180 1.XML歷史 gml(1969)->sgml(1985)->html(1993)->xml(1998) 1969 gml(通用標記語言)&#xff0c;主要目的是要在不同的機器之間進行通信的數據規范1985 sgml(標準通用標記語言)1993 htm…