当前位置:   article > 正文

Windows10中搭建ftp服务器以实现文件传输_windows10配置ftp服务器

windows10配置ftp服务器

开启ftp服务:

1、打开控制面板=====》程序和功能=====》 启用或关闭Windows功能

 

2、找到Internet Information Services,开启以下服务

 

 

 勾选之后,ftp服务开启成功

配置IIS,搭建ftp

 1、Win+S键搜索iis,回车打开=====》右击网站 =====》添加FTP站点

 

在这里插入图片描述

填写FTP站点名称和物理路径,下一步。 

 

 填写IP地址(可直接填写0.0.0.0),选中无SSL,下一步

 全勾上,完成。

 ftp服务搭建完成!

使用文件传输工具测试是否可以连接ftp:

 填写ip地址和端口号,点击连接,弹出一个窗口的话点击确认

 如果能看到右下角的目录,且目录正确则表示连接成功,ftp可用

注意:如果要使用另一台电脑进行连接,则需要将两台电脑连在同一个局域网下,并且关闭作为ftp服务器主机的防火墙。 

如果无法连接,可以关闭防火墙和杀毒软件。

 

上面的全部关闭。

接着打开控制面板=====》Windows Defender防火墙=====》允许应用或功能通过防火墙

 

 更改设置=====》找到FTP服务器,勾选=====》允许其他应用

浏览=====》找到对应目录 

 

 点击打开,添加,确定。

 再试试能否连接ftp服务器。

ftpUtil工具类:

  1. package com.kgc.ymw.util;
  2. import org.apache.commons.net.ftp.*;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.util.ArrayList;
  8. import java.util.Collections;
  9. import java.util.List;
  10. import java.util.StringTokenizer;
  11. /**
  12. * @author: BruceYoung
  13. * @date: 2023/5/23
  14. */
  15. @SuppressWarnings({"all"})
  16. public class FtpUtil {
  17. private String Control_Encoding = "UTF-8";
  18. private FTPClient client = null;
  19. private String host = "";
  20. private int port = 21;
  21. private String user = "";
  22. private String password = "";
  23. private String ftpPath = "/";
  24. @SuppressWarnings("unused")
  25. private FtpUtil() {
  26. }
  27. public FtpUtil(String host, int port, String user, String pwd) {
  28. this.host = host;
  29. this.port = port;
  30. this.user = user;
  31. this.password = pwd;
  32. }
  33. /**
  34. * 获取当前FTP所在目录位置
  35. *
  36. * @return
  37. */
  38. public String getHome() {
  39. return this.ftpPath;
  40. }
  41. /**
  42. * 连接FTP Server
  43. *
  44. * @throws IOException
  45. */
  46. public static final String ANONYMOUS_USER = "anonymous";
  47. public void connect() throws Exception {
  48. if (client == null) {
  49. client = new FTPClient();
  50. }
  51. // 已经连接
  52. if (client.isConnected()) {
  53. return;
  54. }
  55. // 编码
  56. client.setControlEncoding(Control_Encoding);
  57. try {
  58. // 连接FTP Server
  59. client.connect(this.host, this.port);
  60. // 登陆
  61. if (this.user == null || "".equals(this.user)) {
  62. // 使用匿名登陆
  63. client.login(ANONYMOUS_USER, ANONYMOUS_USER);
  64. } else {
  65. client.login(this.user, this.password);
  66. }
  67. // 设置文件格式
  68. client.setFileType(FTPClient.BINARY_FILE_TYPE);
  69. // 获取FTP Server 应答
  70. int reply = client.getReplyCode();
  71. if (!FTPReply.isPositiveCompletion(reply)) {
  72. client.disconnect();
  73. throw new Exception("connection FTP fail!");
  74. }
  75. FTPClientConfig config = new FTPClientConfig(client.getSystemType().split(" ")[0]);
  76. config.setServerLanguageCode("zh");
  77. client.configure(config);
  78. // 使用被动模式设为默认
  79. client.enterLocalPassiveMode();
  80. // 二进制文件支持
  81. client.setFileType(FTP.BINARY_FILE_TYPE);
  82. // 设置模式
  83. client.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
  84. } catch (IOException e) {
  85. throw new Exception("connection FTP fail! " + e);
  86. }
  87. }
  88. /**
  89. * 断开FTP连接
  90. *
  91. * @param ftpClient
  92. * @throws IOException
  93. */
  94. public void close() {
  95. if (client != null && client.isConnected()) {
  96. try {
  97. client.logout();
  98. client.disconnect();
  99. } catch (IOException e) {
  100. e.printStackTrace();
  101. }
  102. }
  103. }
  104. /**
  105. * 获取文件列表
  106. *
  107. * @return
  108. */
  109. public List<FTPFile> list() {
  110. List<FTPFile> list = null;
  111. try {
  112. FTPFile ff[] = client.listFiles(ftpPath);
  113. if (ff != null && ff.length > 0) {
  114. list = new ArrayList<FTPFile>(ff.length);
  115. Collections.addAll(list, ff);
  116. } else {
  117. list = new ArrayList<FTPFile>(0);
  118. }
  119. } catch (IOException e) {
  120. e.printStackTrace();
  121. }
  122. return list;
  123. }
  124. /**
  125. * 切换目录
  126. *
  127. * @param path
  128. * 需要切换的目录
  129. * @param forcedIncrease
  130. * 如果目录不存在,是否增加
  131. */
  132. public void switchDirectory(String path, boolean forcedIncrease) {
  133. try {
  134. if (path != null && !"".equals(path)) {
  135. boolean ok = client.changeWorkingDirectory(path);
  136. if (ok) {
  137. this.ftpPath = path;
  138. } else if (forcedIncrease) {
  139. // ftpPath 不存在,手动创建目录
  140. StringTokenizer token = new StringTokenizer(path, "\\//");
  141. while (token.hasMoreTokens()) {
  142. String npath = token.nextToken();
  143. client.makeDirectory(npath);
  144. client.changeWorkingDirectory(npath);
  145. if (ok) {
  146. this.ftpPath = path;
  147. }
  148. }
  149. }
  150. }
  151. } catch (Exception e) {
  152. e.printStackTrace();
  153. }
  154. }
  155. /**
  156. * 创建目录
  157. *
  158. * @param path
  159. */
  160. public void createDirectory(String path) {
  161. try {
  162. if (path != null && !"".equals(path)) {
  163. boolean ok = client.changeWorkingDirectory(path);
  164. if (!ok) {
  165. // ftpPath 不存在,手动创建目录
  166. StringTokenizer token = new StringTokenizer(path, "\\//");
  167. while (token.hasMoreTokens()) {
  168. String npath = token.nextToken();
  169. client.makeDirectory(npath);
  170. client.changeWorkingDirectory(npath);
  171. }
  172. }
  173. }
  174. client.changeWorkingDirectory(this.ftpPath);
  175. } catch (Exception e) {
  176. e.printStackTrace();
  177. }
  178. }
  179. /**
  180. * 删除目录,如果目录中存在文件或者文件夹则删除失败
  181. *
  182. * @param path
  183. * @return
  184. */
  185. public boolean deleteDirectory(String path) {
  186. boolean flag = false;
  187. try {
  188. flag = client.removeDirectory(path);
  189. } catch (IOException e) {
  190. e.printStackTrace();
  191. }
  192. return flag;
  193. }
  194. /**
  195. * 删除文件
  196. *
  197. * @param path
  198. * @return
  199. */
  200. public boolean deleteFile(String path) {
  201. boolean flag = false;
  202. try {
  203. flag = client.deleteFile(path);
  204. } catch (IOException e) {
  205. e.printStackTrace();
  206. }
  207. return flag;
  208. }
  209. /**
  210. * 上传文件,上传文件只会传到当前所在目录
  211. *
  212. * @param localFile
  213. * 本地文件
  214. * @return
  215. */
  216. public boolean upload(File localFile) {
  217. return this.upload(localFile, "");
  218. }
  219. /**
  220. * 上传文件,会覆盖FTP上原有文件
  221. *
  222. * @param localFile
  223. * 本地文件
  224. * @param reName
  225. * 重名
  226. * @return
  227. */
  228. public boolean upload(File localFile, String reName) {
  229. boolean flag = false;
  230. String targetName = reName;
  231. // 设置上传后文件名
  232. if (reName == null || "".equals(reName)) {
  233. targetName = localFile.getName();
  234. }
  235. FileInputStream fis = null;
  236. try {
  237. // 开始上传文件
  238. fis = new FileInputStream(localFile);
  239. client.setControlEncoding(Control_Encoding);
  240. client.setFileType(FTPClient.BINARY_FILE_TYPE);
  241. boolean ok = client.storeFile(targetName, fis);
  242. if (ok) {
  243. flag = true;
  244. }
  245. } catch (IOException e) {
  246. e.printStackTrace();
  247. }
  248. return flag;
  249. }
  250. /**
  251. * 下载文件,如果存在会覆盖原文件
  252. *
  253. * @param ftpFileName
  254. * 文件名称,FTP上的文件名称
  255. * @param savePath
  256. * 保存目录,本地保存目录
  257. * @return
  258. */
  259. public boolean download(String ftpFileName, String savePath) {
  260. boolean flag = false;
  261. File dir = new File(savePath);
  262. if (!dir.exists()) {
  263. dir.mkdirs();
  264. }
  265. FileOutputStream fos = null;
  266. try {
  267. String saveFile = dir.getAbsolutePath() + File.separator + ftpFileName;
  268. fos = new FileOutputStream(new File(saveFile));
  269. boolean ok = client.retrieveFile(ftpFileName, fos);
  270. if (ok) {
  271. flag = true;
  272. }
  273. } catch (IOException e) {
  274. e.printStackTrace();
  275. }
  276. return flag;
  277. }
  278. public static void main(String args[]) {
  279. // 创建FTP对象
  280. FtpUtil ftp = new FtpUtil("127.0.0.1", 21, "myftp", "myftp@2020");
  281. try {
  282. // 连接FTP
  283. ftp.connect();
  284. // 移动工作空间、切换目录
  285. System.out.println("当前位置:" + ftp.getHome());
  286. ftp.switchDirectory("/test", true);
  287. System.out.println("当前位置:" + ftp.getHome());
  288. // 查询目录下的所有文件夹以及文件
  289. List<FTPFile> list = ftp.list();
  290. System.out.println("|-- " + ftp.getHome());
  291. for (FTPFile f : list) {
  292. System.out.println(" |-- [" + (f.getType() == 0 ? "文件" : "文件夹") + "]" + f.getName());
  293. }
  294. // 上传文件
  295. boolean r1 = ftp.upload(new File("C:\\Users\\joymt\\Documents\\ftp\\测试文件1.txt"), "测试文件2.txt");
  296. System.out.println("上传文件:" + r1);
  297. // 下载文件
  298. boolean r2 = ftp.download("测试文件2.txt", "C:\\Users\\joymt\\Documents\\ftp");
  299. System.out.println("下载文件:" + r2);
  300. // 删除文件
  301. boolean r3 = ftp.deleteFile("/test/测试文件2.txt");
  302. System.out.println("删除文件:" + r3);
  303. // 删除目录
  304. boolean r4 = ftp.deleteDirectory("/test");
  305. System.out.println("删除目录:" + r4);
  306. } catch (Exception e) {
  307. e.printStackTrace();
  308. }
  309. ftp.close();
  310. }
  311. }

工具类最后有测试代码。

ftp依赖:

  1. <!-- ftp文件上传依赖 -->
  2. <dependency>
  3. <groupId>commons-net</groupId>
  4. <artifactId>commons-net</artifactId>
  5. <version>3.6</version>
  6. </dependency>

文件上传代码:

  1. public Map<String, Object> insertSelective(Product product, MultipartFile file, HttpServletRequest request) throws Exception {
  2. HashMap<String, Object> map = new HashMap<>();
  3. String filename = file.getOriginalFilename();
  4. String extension = FilenameUtils.getExtension(filename);
  5. if (!(extension.equals("png") || extension.equals("pneg") || extension.equals("jpg") || extension.equals("jpeg"))) {
  6. map.put("msg", "文件格式不正确");
  7. return map;
  8. }
  9. if (file.getSize() == 0) {
  10. map.put("msg", "文件不能为空");
  11. return map;
  12. }
  13. if (file.getSize() > 5 * 1024 * 1024) {
  14. map.put("msg", "文件大小超过5M");
  15. return map;
  16. }
  17. String newFilename = UUID.randomUUID().toString() + "." + extension;
  18. // 创建FTP对象
  19. FtpUtil ftp = new FtpUtil("127.0.0.1", 21, null , null);
  20. // 连接FTP
  21. ftp.connect();
  22. System.out.println("当前位置:" + ftp.getHome());
  23. String path = request.getSession().getServletContext().getRealPath("upload");
  24. File file1 = new File(path, newFilename);
  25. if (!file1.exists()){
  26. file1.mkdirs();
  27. }
  28. file.transferTo(new File(path, newFilename));
  29. // 上传文件
  30. boolean r1 = ftp.upload(file1, newFilename);
  31. System.out.println("上传文件:" + r1);
  32. //关闭连接
  33. ftp.close();
  34. if (StringUtils.isEmpty(product.getCategorylevel2id())) {
  35. product.setCategorylevel2id(0);
  36. }
  37. if (StringUtils.isEmpty(product.getCategorylevel3id())) {
  38. product.setCategorylevel3id(0);
  39. }
  40. product.setId(UUID.randomUUID().toString());
  41. product.setIsdelete(0);
  42. product.setFilename(newFilename);
  43. product.setCreatedate(new Date());
  44. if (productMapper.insertSelective(product) != 1) {
  45. throw new Exception("数据库添加失败!");
  46. }
  47. solrClient.addBean(product);
  48. solrClient.commit();
  49. return map;
  50. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/208414
推荐阅读
相关标签
  

闽ICP备14008679号