失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java通过FTP连接到NAS服务器

java通过FTP连接到NAS服务器

时间:2022-11-05 19:26:47

相关推荐

java通过FTP连接到NAS服务器

1.搭建一个NAS服务器

新手教程:/p/a3gw7q27/

这篇文章我只进行到第二大步,第三步配置DDNS,安装应用程序,我没有实现,连不上网络。

2.外网访问

在加了一些相关群之后,我了解到了需要如何才能外网访问NAS,也就是第三步。

步骤如下

如上图,公网IP需要给连接网络所在运营商(联通,电信,移动)去申请,这个申请其实还是比较麻烦的,那么就只能是改公网IP,目前我没有找到改公网IP的办法,所以上图中的方式也就不行了。

2.1 使用内网穿透连接NAS

花生壳我就不多介绍了,能玩NAS,肯定也知道花生壳。

花生壳是可以分配一个域名给用户使用的,外网端口一般也是随机生成的。

内网主机:也就是NAS服务器的内网IP,端口为21。

3.设置NAS文件传输器

因为花生壳映射的端口是变化的,通常在10000-30000之间

4.通过FTP连接到NAS服务器。上传文件

import .ftp.FTPClient;import org.apache.log4j.Logger;import java.io.*;/*** 通过FTP上传文件** @Author lvhaibao* @Date /2/11 21:43*/public class FTPTools {//用于打印日志private static final Logger log = Logger.getLogger(FTPTools.class);//设置私有不能实例化private FTPTools() {}/*** 上传** @param hostname ip或域名地址* @param port 端口* @param username 用户名* @param password 密码* @param workingPath 服务器的工作目* @param inputStream 要上传文件的输入流* @param saveName 设置上传之后的文件名* @return*/public static boolean upload(String hostname, int port, String username, String password, String workingPath, InputStream inputStream, String saveName) {boolean flag = false;FTPClient ftpClient = new FTPClient();//1 测试连接if (connect(ftpClient, hostname, port, username, password)) {try {//2 检查工作目录是否存在if (ftpClient.changeWorkingDirectory(workingPath)) {// 3 检查是否上传成功if (storeFile(ftpClient, saveName, inputStream)) {flag = true;disconnect(ftpClient);}}} catch (IOException e) {log.error("工作目录不存在");e.printStackTrace();disconnect(ftpClient);}}return flag;}/*** 断开连接** @param ftpClient* @throws Exception*/public static void disconnect(FTPClient ftpClient) {if (ftpClient.isConnected()) {try {ftpClient.disconnect();log.error("已关闭连接");} catch (IOException e) {log.error("没有关闭连接");e.printStackTrace();}}}/*** 测试是否能连接** @param ftpClient* @param hostname ip或域名地址* @param port端口* @param username 用户名* @param password 密码* @return 返回真则能连接*/public static boolean connect(FTPClient ftpClient, String hostname, int port, String username, String password) {boolean flag = false;try {//ftp初始化的一些参数ftpClient.connect(hostname, port);ftpClient.enterLocalPassiveMode();ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);ftpClient.setControlEncoding("UTF-8");if (ftpClient.login(username, password)) {log.info("连接ftp成功");flag = true;} else {log.error("连接ftp失败,可能用户名或密码错误");try {disconnect(ftpClient);} catch (Exception e) {e.printStackTrace();}}} catch (IOException e) {log.error("连接失败,可能ip或端口错误");e.printStackTrace();}return flag;}/*** 上传文件** @param ftpClient* @param saveName 全路径。如/home/public/a.txt* @param fileInputStream 要上传的文件流* @return*/public static boolean storeFile(FTPClient ftpClient, String saveName, InputStream fileInputStream) {boolean flag = false;try {if (ftpClient.storeFile(saveName, fileInputStream)) {flag = true;log.error("上传成功");disconnect(ftpClient);}} catch (IOException e) {log.error("上传失败");disconnect(ftpClient);e.printStackTrace();}return flag;}public static void main(String[] args) throws FileNotFoundException {String hostname = "ip";int port = 端口;String username = "nas账户";String password = "nas密码";String workingPath = "/NAS/images/";String str = "C:\\Users\\43834\\Desktop\\1.png";InputStream fileInputStream = new FileInputStream(new File(str));String saveName = "1.png";System.out.println(FTPTools.upload( hostname, port, username, password, workingPath, fileInputStream, saveName));}}

如果只是内网下使用NAS,那么可以直接输入NAS IP+端口 ,这样速度很快。

外网就需要映射的url+端口了!

如果觉得《java通过FTP连接到NAS服务器》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。