首先需要搭建FTP服务步骤如下:
1.在win7上先开启ftp服务:这里点击确定后,可能会要等一会儿,完成后有时系统会提示重启
2.打开 计算机--》管理--》 在这里我们可以看见刚刚添加的服务 (IIS)
3.创建一个ftp站点
4.点击添加FTP站点后,就是要继续的添加必要的站点信息,这里是:站点名称 以及登录ftp后的站点指定目录(文件夹),点击下一步
5.站点的地址就写自己的IP就好,端口21,是ftp的默认端口,(端口随意,尽量不要用已经被占用了的端口号)
6.,这里要填写一下登录用户,基本呢就是本计算机上的用户,匿名呢就是Anonymous 密码只要是符合电子邮箱的格式就都可以登录例如:"IEUser@",百度上说不用写空的也可以,没试过,有时候可以吧;
访问权限 顾名思义,针对计算机上的用户
读写就不说了点击完成,就成功建立了一个FTP站点了
7.建立之后就是这个样子,右击点击你们建立的站点,启动就好.(这是我之前建好的站点)
8.用户,用户就是用系统当前的windows用户即可,也可以自己创建一个,具体做法就是用户-->右键选择新用户,要填写自己的用户名和密码
10.这样一个ftp站点就已经创建好了,可以在浏览器,或者是在窗口上输入:ftp://192.168.1.151:21回车即可看到自己的指定空间,若有用户名密码那就输入用户密码点击确定就好啦,我们还可以在ftp站点上设置一下权限之类的,例如这样: 点击进去可以设置相应的权限
11.这样ftp站点完成了,第一种方法中可能还会要我们时常的开启服务,还要注意我们当前使用的端口号是否已经被占用,若已经被占用,那就需要修改一下端口号,方法可能需要我们重新建立一个ftp站点(小伙伴有什么更好的建议可以评论留言),若果是自己的电脑的话,服务可以设置成手动的,若是公司的话,那就根据相应的需求去改动。
下面要介绍的是第二种方法,第二种方法相对来说比较简单,就是用已经现成的FileZillaServer这款软件,这款软件小巧实用,一共也就2M,上百度搜索下载安装打开就好了基本上就都用默认设置就够用了
12.打开后是这个界面,我们使用本地地址,端口那里默认14147就好,实际上还是21,若要修改端口,就在第一次登陆ftp的时候,在冒号后面加上自己想要修改之后的端口号就好,-->点击连接
13.在Edit-->Users添加登录用户,在这里给出用户名,相应的地址,和对应的权限
添加密码
14.点击OK ,这样一个ftp服务也搭建好了,这个可以更加直观的看日志,另外,在Edit-->Settings中也可以修改对日志的设置,好了这个就是第二种方法,第二种方法看起来更加的简便吧,以上就是在win7上搭建ftp服务的两种方法,本人新手小白,请多多指教!
有人会说我上传或者下载的文件为什么会少1kb呀,又或者是,我上传的文件被损坏了,无法打开,txt还可以打开,但是其它的就不好说了,又或者是上传的图片,尾部有一小节的数据丢失,说实话我也出现了这个问题,最后发现是jar包的版本问题,ftp上传是要添加jar包的apache的这款jar包:commons-net-3.3.jar,这个jar包的版本是3.3的,传输是没有问题的,但如果使用commons-net-3.0.jar,3.0这个版本的话是会有一个功能bug,会造成数据尾部丢失,它的传输是只能传输整数kb的文件,意思呢就是他的传输方法中用的是取整kb,例如:166.7kb,传输之后就只会有166.0kb,相应的在3.0.1版本之后可能就把这个bug修正了,所以万一碰见了不用急,只要换一个版本较高一点的jar包就好了,本人亲测,非常好用!
以上内容转自:https://blog.csdn.net/XRB_666/article/details/73913586
还有linux环境下搭建的方法,因不具备条件本人并未亲试,但是可以参考一下:https://www.cnblogs.com/xiaojiaocx/p/6410015.html
对于FTP操作的相关学习链接(有删除,字符编码设置,工作流等等的设置):https://blog.csdn.net/zahaa2012/article/details/51150162
以下是自己学习是的代码:
public class FTPClientTest { ???/** ????* 创建ftp上传文件的方法 ????* @param url 主机地址 ????* @param port 主机端口号 ????* @param uname 用户名 ????* @param pword 密码 ????* @param pathname FTP服务器保存文件的路径 ????* @param filename 文件名称 ????* @param inputStream 输入流 ????* @return ????*/ ???public static boolean uploadFile(String url,int port,String uname,String pword,String pathname,String filename ???????????,InputStream inputStream){ ???????boolean isSuccess = false; ???????FTPClient ftpClient = new FTPClient(); ?//创建FTPClient对象
//传输的字符编码(防乱码)
??????? ftpClient.setControlEncoding("UTF-8"); ?
?
??????? //超时时间(防止FTP僵死) ?
??????? ftpClient.setConnectTimeout(1000 * 60); ?
??????? ftpClient.setDataTimeout(1000 * 60); ?
??????? ftpClient.setDefaultTimeout(1000 * 60); ?
?
??????? //工作流的大小 ?
??????? ftpClient.setBufferSize(1024 * 4); ?
?
??????? //主被动模式(应对FTP服务器的相关安全设置) ?
??????? //ftpclient.enterLocalPassiveMode(); ?
??????? ftpClient.enterLocalActiveMode(); ?
???????try { ???????????ftpClient.connect(url, port); ?//通过ftpClient对象以及url和端口号创建连接 ???????????ftpClient.login(uname, pword); ?//进行登录 ???????????int reply = ftpClient.getReplyCode(); ?//看返回的值是不是230,如果是,表示登陆成功 ???????????????????????//System.out.println("返回值是什么呢??----"+reply); ???????????/*if(!FTPReply.isNegativePermanent(reply)){ ?//满足这个条件则代表连接失败 ???????????????ftpClient.disconnect(); ???????????????return isSuccess; ???????????}*/ ???????????boolean c = ftpClient.changeWorkingDirectory(pathname); ?//设置工作空间 ???????????????????????//System.out.println(c); ???????????boolean b = ftpClient.storeFile(filename, inputStream); ?//上传文件 ???????????????????????//System.out.println("上传成功了吗????----"+b); ???????????inputStream.close(); ?//关闭输入流 ???????????ftpClient.logout(); ?//退出登录 ???????????isSuccess = true; ?????????} catch (SocketException e) { ???????????// TODO Auto-generated catch block ???????????e.printStackTrace(); ???????} catch (IOException e) { ???????????// TODO Auto-generated catch block ???????????e.printStackTrace(); ???????} ???????????????return isSuccess; ???} ???????/** ????* 创建ftp下载文件的方法 ????* @param url ftp服务地址 ????* @param username ?ftp用户名 ????* @param password ?ftp用户密码 ??????* @param filepath ?ftp下载的文件名 ????* @param remotepath ?ftp文件的相对路径 ????* @param port ?ftp服务器的端口号 ????* @param localpath ?下载文件的保存位置 ????* @return ????*/ ???public static boolean downFile(String url,String username,String password,String filename,String remotepath, ???????????int port,String localpath){ ???????boolean success = false; ???????FTPClient ftp = new FTPClient(); ?//创建FTPClient对象 ???????try { ???????????ftp.connect(url, port); ?//创建链接 ???????????ftp.login(username, password); ?//登录FTP服务 ???????????int code = ftp.getReplyCode(); ?//获取返回的reply值 ??230代表连接成功 ???????????ftp.changeWorkingDirectory(remotepath); ?//转移到ftp服务器目录 ???????????FTPFile[] files = ftp.listFiles(); ?//通过listFiles()获取所有的文件名 ???????????for (FTPFile file : files) { ???????????????if(file.getName().equals(filename)){ ?//找到相匹配的文件名进行下载 ???????????????????File localFile = new File(localpath+"/"+filename); ???????????????????????????????????????OutputStream os = new FileOutputStream(localFile); ???????????????????boolean b = ftp.retrieveFile(filename, os); ?????????????????????System.out.println("下载成功了吗???---"+b); ???????????????????success = true; ???????????????} ???????????} ???????????????????} catch (IOException e) { ???????????// TODO Auto-generated catch block ???????????e.printStackTrace(); ???????} ???????return success; ???} ???????public static void main(String [] args){ ???????try { ???????????FileInputStream fis = new FileInputStream(new File("D:/qcq公司资料/test.txt")); ???????????//boolean flag = uploadFile("192.168.2.90", 21, "qcq", "qcq", "test", "test1", fis); ?//验证上传文件 ???????????//System.out.println("----------"+flag); ???????????????????????boolean b = downFile("192.168.2.90", "qcq", "qcq", "test1", "/test", 21, "d:/qcq公司资料"); ?//验证下载文件 ???????????System.out.println("----------"+b); ???????} catch (FileNotFoundException e) { ???????????// TODO Auto-generated catch block ???????????e.printStackTrace(); ???????} ???????????}}
FTP服务器搭建以及上传下载的学习
原文地址:https://www.cnblogs.com/qcq0703/p/9009493.html