• 配置ftp及java链接上传文件到ftp


    FTP工作原理


    结构:
    FTP采用C/S(客户端/服务端)结构

    端口:
    通常默认使用TCP端口中的 20和21这两个端口
    20传输数据,21传输控制信息

    基本原理:


    用户使用支持FTP协议的客户端,连接到在远程主机上的FTP服务端程。用户通过客户端向服务端发出命令,服务端就会执行用户所发出的命令,然后将执行的结果返回到客户端。
     

    1.安装vsftpd

    yum -y install vsftpd

    2.关闭匿名访问

            可以不关,不关就可以不输入用户名密码直接访问

    vim /etc/vsftpd/vsftpd.conf

     3.启动服务

    systemctl start vsftpd.service
    

    4.查看服务状态

    systemctl status vsftpd.service
    

     5.关闭防火墙

    systemctl disable firewalld 

    新建一个用户,用于操作FTP。并将文件保存在用户目录下

    1. adduser ftpuser #创建账号
    2. passwd ftpuser #设定密码

    通过本地文件夹  ftp://ip 进行访问 

     

    java实现链接ftp 

    添加对应的依赖

    1. <!-- ftp上传-->
    2. <dependency>
    3. <groupId>commons-net</groupId>
    4. <artifactId>commons-net</artifactId>
    5. <version>3.8.0</version>
    6. </dependency>

     一:配置连接FTP静态方法,或者定义一个util

    1. /**
    2. * @param url FTP服务器hostname
    3. * @param port FTP服务器端口
    4. * @param username FTP登录账号
    5. * @param password FTP登录密码
    6. * @param path FTP服务器保存目录
    7. * @param filename 文件名 6403_APP_YYYYMMDD_渠道标志_批次号.txt
    8. * @param inputStream 输入流
    9. * @return
    10. */
    11. private static boolean uploadFileFTP(String url, int port, String username, String password,
    12. String path, String filename, InputStream inputStream) {
    13. boolean success;
    14. FTPClient ftp = new FTPClient();
    15. try {
    16. int reply;
    17. // 链接 FTP 服务器
    18. // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
    19. ftp.setConnectTimeout(10000*10000);
    20. ftp.connect(url);
    21. // 登录
    22. ftp.login(username, password);
    23. // 返回链接码
    24. reply = ftp.getReplyCode();
    25. // 设置文件格式为二进制类型
    26. if (!FTPReply.isPositiveCompletion(reply)) {
    27. ftp.disconnect();
    28. log.info("FTP服务器 拒绝连接");
    29. return false;
    30. }
    31. ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
    32. ftp.makeDirectory(path);
    33. // 跳转到指定的目录路径
    34. ftp.changeWorkingDirectory(path);
    35. ftp.enterLocalPassiveMode();
    36. // 存储文件
    37. ftp.storeFile(filename, inputStream);
    38. inputStream.close();
    39. ftp.logout();
    40. success = true;
    41. } catch (IOException e) {
    42. log.error("FTP服务器 文件上传失败 失败原因:{}", e.getMessage(), e);
    43. return false;
    44. } finally {
    45. if (ftp.isConnected()) {
    46. try {
    47. ftp.disconnect();
    48. } catch (IOException e) {
    49. log.error("FTP服务器 关闭失败 失败原因:{}", e.getMessage(), e);
    50. }
    51. }
    52. }
    53. return success;
    54. }

    二:创建接口进行上传图片

    1. @RequestMapping("/addUser")
    2. public Object addUser(@RequestParam("headPic")MultipartFile file) throws IOException {
    3. InputStream inputStream = file.getInputStream(); //获取上传的文件流
    4. String filename = file.getOriginalFilename();//获取上传的文件名
    5. String suffix = filename.substring(filename.lastIndexOf("."));//获取后缀
    6. String fileName = UUID.randomUUID().toString()+suffix; //定义一个不重复的名字
    7. boolean b = uploadFileFTP("0.0.0.0", 21, "ftpuser", "ftpuser", "/root/tomcat/apache-tomcat-8.5.81/webapps/yuansheng", fileName, inputStream);
    8. return b;
    9. }

    使用postman进行测试:

    上传文件进行测试

     一般都会存在用户目录下:

    如果不是用户的目录下地址,则自动会存入用户下。(只会跑到用户目录下存储)

     

     

  • 相关阅读:
    【文件包含漏洞-03】文件包含漏洞的六种利用方式
    【Numpy】练习题100道(26-50题)
    程序员网上接单盛行,到底该怎样选择一个好用不坑的接单平台?
    YUV图像格式
    创建Struts2项目并实现一个例子
    LeetCode力扣刷题——玩转双指针
    P4867 Gty的二逼妹子序列(莫队+值域分块)
    JVM222
    Python xlrd和xlwt操作Excel实现自动化
    LeetCode每日一题(2181. Merge Nodes in Between Zeros)
  • 原文地址:https://blog.csdn.net/Java_Mr_Jin/article/details/125625965