java中ftp文件上傳和中文亂碼解決

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

前幾天 有個需求就是上傳文件的時候,本地存一份,其他服務器也保存一份,于是就研究了一下,功能只實現了上傳文件不能上傳文件夾,

這里主要用到了 ftp服務器軟件 網上有很多我用的是 serv-u,操作比較簡單很容易像我這樣的小菜使用

服務器下載地址

點擊打開鏈接? ? ? ? ? ?絕對安全無病毒

實現類代碼

[java]?view plain?copy
  1. <pre?code_snippet_id="244843"?snippet_file_name="blog_20140319_4_6086968"?name="code"?class="java">package?com.core.haction;??
  2. ??
  3. import?java.io.File;??
  4. import?java.io.FileInputStream;??
  5. import?java.io.IOException;??
  6. import?java.io.PrintWriter;??
  7. import?org.apache.commons.net.ftp.FTPClient;??
  8. import?org.apache.commons.net.ftp.FTPReply;??
  9. import?com.core.action.BaseAction;??
  10. ??
  11. public?class?ShangChuanFtp?extends?BaseAction<Model>?{??
  12. ??
  13. ????public?ShangChuanFtp()?{??
  14. ????????super(Model.class);??
  15. ????????//?TODO?Auto-generated?constructor?stub??
  16. ????}??
  17. ??
  18. ????/**?
  19. ?????*??
  20. ?????*/??
  21. ????private?static?final?long?serialVersionUID?=?1L;??
  22. ????private?FTPClient?ftp;??
  23. ??
  24. ????/**?
  25. ?????*??
  26. ?????*?@param?path?
  27. ?????*????????????上傳到ftp服務器哪個路徑下?
  28. ?????*?@param?addr?
  29. ?????*????????????地址?
  30. ?????*?@param?port?
  31. ?????*????????????端口號?
  32. ?????*?@param?username?
  33. ?????*????????????用戶名?
  34. ?????*?@param?password?
  35. ?????*????????????密碼?
  36. ?????*?@return?
  37. ?????*?@throws?Exception?
  38. ?????*/??
  39. ????private?boolean?connect(String?path,?String?addr,?int?port,??
  40. ????????????String?username,?String?password)?throws?Exception?{??
  41. ????????boolean?result?=?false;??
  42. ????????ftp?=?new?FTPClient();??
  43. ????????int?reply;??
  44. ????????ftp.connect(addr,?port);//連接ftp服務器??
  45. ????????ftp.login(username,?password);//登錄ftp??
  46. ????????ftp.setFileType(FTPClient.BINARY_FILE_TYPE);??
  47. ????????reply?=?ftp.getReplyCode();??
  48. ????????if?(!FTPReply.isPositiveCompletion(reply))?{??
  49. ????????????ftp.disconnect();??
  50. ????????????return?result;??
  51. ????????}??
  52. ????????ftp.changeWorkingDirectory(path);??
  53. ????????result?=?true;??
  54. ????????return?result;??
  55. ????}??
  56. ??
  57. ????/**?
  58. ?????*??
  59. ?????*?@param?file?
  60. ?????*????????????上傳的文件或文件夾?
  61. ?????*?????????????
  62. ?????*????????????代碼我是從網上找的,在使用過程中出現了,中文文件名稱不能上傳,后來自己改變了一下編碼?
  63. ?????*?@throws?Exception?
  64. ?????*/??
  65. ????private?void?upload(File?file)?throws?Exception?{??
  66. ????????if?(file.isDirectory())?{??
  67. ????????????//?System.out.println(file.isDirectory()+"\n"+file.getName());??
  68. ????????????ftp.makeDirectory(new?String(file.getName().getBytes("utf-8"),"8859_1"));//給文件名轉換編碼??
  69. ????????????//System.out.println(file.getName());??
  70. ????????????ftp.changeWorkingDirectory(new?String(file.getName().getBytes("utf-8"),"8859_1"));??
  71. ????????????String[]?files?=?file.list();??
  72. ????????????for?(int?i?=?0;?i?<?files.length;?i++)?{??
  73. ????????????????File?file1?=?new?File(file.getPath()?+?"\\"?+?files[i]);??
  74. ????????????????if?(file1.isDirectory())?{??
  75. ????????????????????upload(file1);??
  76. ????????????????????ftp.changeToParentDirectory();??
  77. ????????????????}?else?{??
  78. ????????????????????File?file2?=?new?File(file.getPath()?+?"\\"?+?files[i]);??
  79. ????????????????????FileInputStream?input?=?new?FileInputStream(file2);??
  80. ????????????????????ftp.storeFile(new?String(file2.getName().getBytes("utf-8"),"8859_1"),?input);??
  81. ????????????????????input.close();??
  82. ????????????????}??
  83. ????????????}??
  84. ????????}?else?{??
  85. ????????????File?file2?=?new?File(file.getPath());??
  86. ????????????System.out.println(file2.getName());??
  87. ????????????FileInputStream?input?=?new?FileInputStream(file2);??
  88. ????????????ftp.storeFile(new?String(file2.getName().getBytes("utf-8"),"8859_1"),?input);??
  89. ????????????input.close();??
  90. ????????}??
  91. ????}??
  92. ??
  93. ????//?public?static?void?main(String[]?args)?throws?Exception{//本地測試方法??
  94. ????//?ShangChuanFtp?t?=?new?ShangChuanFtp();??
  95. ????//?t.connect("",?"遠程服務器的Ip地址",?21,?"ftp的登錄名",?"ftp的登錄密碼");??
  96. ????//?File?file?=?new?File("d:\\webapps");//要上傳的文件地址??
  97. ????//?t.upload(file);??
  98. ????//?System.out.println("上傳完成");??
  99. ????//?}??
  100. ????/**?
  101. ?????*??
  102. ?????*?@param?file?
  103. ?????*??????????以下代碼,住web頁面用的,strut2的語法大家應該都會知道???
  104. ?????*?@throws?IOException?
  105. ?????*/??
  106. ????private?File?pphoto;??
  107. ????private?String?pphotoFileName;??
  108. ????private?String?pphotoFileContentType;??
  109. ????private?static?final?String?filePath?=?"/while/photo";//上傳文件到本地服務器的路徑??
  110. ????private?String?textfield;??
  111. ??
  112. ????public?String?scftp()?throws?IOException?{??
  113. ????????PrintWriter?out?=?getResponse().getWriter();??
  114. ??????????
  115. ????????try?{??
  116. ??????????????
  117. ????????????String?fileUrl?=?null;??
  118. ????????????if?(pphoto?!=?null)?{??
  119. ????????????????//自己封裝的上傳本地服務器的方法fileUrl是方法的返回值我這里是返回的文件名稱??
  120. ????????????????fileUrl?=?this.saveFile(pphoto,?pphotoFileName,?filePath,false);??
  121. ????????????????System.out.println("3:"?+?this.getSession().getAttribute("dir"));??
  122. ????????????????//t.connect("",?"遠程服務器的Ip地址",?21,?"ftp的登錄名",?"ftp的登錄密碼");21是端口號??
  123. ????????????????connect("",?"000.000.000.000",?21,?"",?"");??
  124. ????????????????//this.getSession().getAttribute("dir")這個是獲取的上傳到本地服務器的路徑,用了個懶辦法,在上傳方法我存到session里面,這邊獲取的??
  125. ????????????????//fileUrl是你上傳的那個文件名??
  126. ????????????????File?file?=?new?File(this.getSession().getAttribute("dir")+"/"+fileUrl);??
  127. ????????????????upload(file);??
  128. ????????????}?else?{??
  129. ????????????????out.print("0");??
  130. ????????????}??
  131. ??????????????
  132. ??
  133. ????????}?catch?(Exception?e)?{??
  134. ????????????//?TODO?Auto-generated?catch?block${ctx?}/json/scftp.action??
  135. ????????????System.out.println(e.getMessage());??
  136. ????????}??
  137. ??
  138. ????????out.print("1");??
  139. ????????return?null;??
  140. ????}??
  141. ??
  142. ????public?String?getTextfield()?{??
  143. ????????return?textfield;??
  144. ????}??
  145. ??
  146. ????public?void?setTextfield(String?textfield)?{??
  147. ????????this.textfield?=?textfield;??
  148. ????}??
  149. ??
  150. ????public?File?getPphoto()?{??
  151. ????????return?pphoto;??
  152. ????}??
  153. ??
  154. ????public?void?setPphoto(File?pphoto)?{??
  155. ????????this.pphoto?=?pphoto;??
  156. ????}??
  157. ??
  158. ????public?String?getPphotoFileName()?{??
  159. ????????return?pphotoFileName;??
  160. ????}??
  161. ??
  162. ????public?void?setPphotoFileName(String?pphotoFileName)?{??
  163. ????????this.pphotoFileName?=?pphotoFileName;??
  164. ????}??
  165. ??
  166. ????public?String?getPphotoFileContentType()?{??
  167. ????????return?pphotoFileContentType;??
  168. ????}??
  169. ??
  170. ????public?void?setPphotoFileContentType(String?pphotoFileContentType)?{??
  171. ????????this.pphotoFileContentType?=?pphotoFileContentType;??
  172. ????}??
  173. ??
  174. }

?

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

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

相關文章

線段與多邊形的關系

轉自周見智 介紹 最近項目中要用到有關幾何&#xff08;Geometry&#xff09;方面的知識&#xff0c;程序需要判斷給定的一條線段&#xff08;Segment&#xff09;與指定多邊形&#xff08;Polygon&#xff09;的位置關系。這種關系分為三種&#xff1a;多邊形包含線段、多邊形…

shell的交互式和非交互式登錄

工作中經常碰見環境變量加載問題&#xff0c;歸根結底就是配置文件的加載問題。 一般會有四種模式&#xff1a;交互式登陸、非交互式登陸、交互式非登陸、非交互非登陸。 交互式和非交互式對環境變量的加載: -------------------------------------------------- | …

運營商取消話費余額有效期后改收閑置費

摘要&#xff1a;截至昨天&#xff0c;北京的CDMA預付費手機用戶均收到了中國電信北京公司的短信通知。5月初&#xff0c;中國聯通正式取消有月租或有月最低消費的預付費產品的話費有效期。而邱寶昌認為&#xff0c;防止倒號和號碼資源浪費本應是運營商的責任&#xff0c;現在運…

內存柵欄的影響

當我們在使用jvm鎖的時候&#xff0c;一方面是為了減少線程的競爭&#xff0c;另外還有一方面就是保證共享數據的及時可見性。為了保證線程共享變量的可見性&#xff0c;會使用到內存柵欄&#xff0c;jvm設置內存柵欄&#xff0c;并將共享數據及時刷新到主存中保證其他線程可以…

hibernate連接數據庫配置

hibernate連接數據庫配置 1.連接mySql&#xff0c;文件配置如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://…

解決,文件上傳到 ftp 服務器,中文出現亂碼問題

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 上傳到 ftp 服務器&#xff0c;中文出現亂碼解決&#xff0c;之前文件名 “ 網關信息 ” 始終不能正確顯示&#xff0c;嘗試了多種編碼…

常用負載均衡策略分析

背景 一般生產環境單機所能承受的QPS壓力為2w左右&#xff0c;過大的壓力會導致服務器爆炸。即便是單機能夠撐住2w QPS&#xff0c;一般也不會這么做&#xff0c;生產環境一般會預留50%的冗余能力&#xff0c;防止QPS因為某個熱門的活動而爆炸。當QPS超過單機所能承受的壓力時&…

cpu id 系列號代碼

1。先看看是那家公司的cpu,有intel的&#xff0c;還有amd的和 cyrix的。全世界只有三家&#xff0c;實際就是兩家。 先讓EAX0&#xff0c;再調用CPUID Inel的CPU將返回: EBX:756E6547H Genu EDX:49656E69H ineI ECX:6C65746EH ntel EBX,EDX,E…

解決- SecureCRT上運行 linux vim 命令中文出現亂碼

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 亂碼如圖&#xff1a; 這個問題是CRT的編碼設置造成的&#xff0c;改一下設置就可以了&#xff1a; 1. 在當前連接上右鍵選擇最后一個 2…

開發一個自己的 CSS 框架(五)

這一期我們繼續完成我們的網格布局 容器類 通過一個 # 占位符&#xff0c;來減少代碼輸出量。 #containerpadding-right: 15pxpadding-left: 15pxmargin-right: automargin-left: auto.containerwidth: 100%extend #containermedia screen and (min-width: $media-size-1)max-w…

mysql event 簡單demo

功能&#xff1a;每3秒刪除b表數據&#xff0c;查詢a表中的5條數據并插入b表。 /* 查看mysql事件狀態 */ show variables like %event_scheduler%;/* 開啟mysql事件 */ SET GLOBAL event_scheduler ON;/* 測試a表*/ CREATE TABLE test_a (id int(11) NOT NULL AUTO_INCREMENT…

linux中操作數據庫的使用命令記錄

1&#xff0c;mysql 查看數據庫表編碼格式&#xff1a; show create table widget; 修改數據庫表編碼格式&#xff1a; alter table widget default character set utf8; 修改數據庫表中某字段的編碼格式&#xff1a; alter table widget change widget_name widget_name varc…

ICC Scenario Definition

現代先進工藝下的后端設計都是在 MCMM 情況下設計的&#xff0c;所謂 MCMM 就是 muti-corner muti-mode&#xff0c;用于芯片的不同工作模式和工作條件。 后端設計過程中&#xff0c;需要保證芯片在所有工作模式和工作條件下都能正常工作&#xff0c;工作模式一般只有幾種&…

別瞎忙活:創業公司的6條時間管理策略

導讀&#xff1a;無數創業者為自己的公司努力拼搏&#xff0c;把一切時間投入到公司建設中。這種724小時的熱情對于創業者本人是必須的&#xff0c;然而對于創業中的團隊來說&#xff0c;更重要的是學會管理時間。倦怠是錯誤時間管理帶來的顯著危害&#xff0c;但最大的危險是因…

JDK8下載|JDK1.8下載可選擇window版和linux版

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 摘要&#xff1a;Oracle甲骨文公司Oracle公司如期發布了Java 8正式版!現在你就可以下載Java 8正式版了&#xff0c;同期發布的還有JDK 8。…

持續集成與持續部署寶典Part 2:創建持續集成流水線

2019獨角獸企業重金招聘Python工程師標準>>> 在本系列文章中&#xff0c;我們將探討在容器時代如何在基于Docker的環境中創建連貫的工作流程和流水線來簡化大規模項目的部署。另外&#xff0c;我們還將詳細介紹如何利用Docker和Rancher自動化處理這些工作流。 在上文…

64 裝飾器函數: 母版 csrf防御機制 cookie

主要內容: 1: 裝飾器函數 a: 原理: 在不改變原函數的代碼和調用方式的情況下, 給函數動態的添加功能 b: 實例: 裝飾器的原理: def yue(tools):print(使用%s約一約 % tools) def wrapper(fn):def inner(*args, **kwargs):print(先準備好錢)fn(*args, **kwargs)return inner yue …

Facebook與Google的互聯網霸主爭奪戰

摘要&#xff1a;谷歌的兩位創始人對搜索情有獨鐘&#xff0c;而沒有看到互聯網發展的大勢。雖然目前Facebook的估值最高為1000億美元&#xff0c;與谷歌近2000億美元的市值還相去甚遠&#xff0c;但是未來很有可能超越谷歌&#xff0c;成為互聯網新一代霸主。谷歌的兩位創始人…

Eclipse將引用了第三方jar包的Java項目打包成jar文件的兩種方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 方案一&#xff1a;用Eclipse自帶的Export功能 步驟1&#xff1a;準備主清單文件 “MANIFEST.MF”&#xff0c; 由于是打包引用了第三…

Linux-MySQL基本命令-SQL語句

服務端命令SQL 在數據庫系統中&#xff0c;SQL語句不區分大小寫(建議用大寫) ?SQL語句可單行或多行書寫&#xff0c;以“;”結尾 ?關鍵詞不能跨多行或簡寫 ?用空格和縮進來提高語句的可讀性 ?子句通常位于獨立行&#xff0c;便于編輯&#xff0c;提高可讀性 ?注釋&#x…