ftp服务器搭建(windows):

vsftpd简介:

vsftpd是“very secure FTP daemon”的缩写,是一个完全免费的、开放源代码的ftp服务器软件。

下载地址:

http://download.happymmall.com/FTPServer.rar

安装启动步骤:

1.下载解压,点击.exe文件,打开看到如下界面:

2.用户名和密码可以自己随意设置,只要在登录的时候用这个就可以了,共享目录是你要共享出去的你本地的一个目录,上传下载也都在这个里面。

3.打开cmd,输入ipconfig,查看你自己的Ipv4地址

4.在浏览器中输入ftp://你的ip地址,弹出登录框,登录即可看到你的共享目录中的内容。

实现ftp图片上传对接:

1.将ftp服务器需要的配置信息放入properties中,包括ip, user, pwd, 域名前缀。例如:

ftp.server.ip=211.69.197.245
ftp.user=cq
ftp.pass=ftp123
ftp.server.http.prefix=http://img.mall.com/

2.写一个service,上传图片文件到ftp服务器,在这个service中,对path以及文件名做一定的处理,然后具体的上传工作由调用FTPUtil来实现。此时运行后也就需要将ftp服务器开启,才能正确连接并上传。

 @Service("iFileService")
public class FileServiceImpl implements IFileService{ private Logger logger = LoggerFactory.getLogger(FileServiceImpl.class); /**
* 上传图片文件到服务器
* @param file 要上传的图片文件
* @param path 上传路径
* @return 上传成功后的文件名返回
*/
public String upload(MultipartFile file, String path) {
//获取原始文件名
String fileName = file.getOriginalFilename();
//获取文件扩展名
//lastIndexOf:返回"."在fileName中最后一个匹配项的索引位置,即abc.jpg会返回.jpg
String fileExtensionName = fileName.substring(fileName.lastIndexOf(".") + 1);
//为了防止不同用户上传图片时,两张图片的文件名完全相同导致覆盖的情况,这里对文件名加上UUID防重复
String uploadFileName = UUID.randomUUID().toString() + "." + fileExtensionName;
//打印日志,通过{}进行占位,也就是一个占位符对应后面的一个数据,类似于c里面的printf("%c",h);
logger.info("开始上传文件,上传文件的文件名:{},上传的路径:{},新文件名:{}", fileName, path, uploadFileName); //创建上传路径目录的文件对象
File fileDir = new File(path);
if(!fileDir.exists()) {
//如果不存在
//赋予这个文件fileDir可写
fileDir.setWritable(true);
//创建文件
//mkdir():当前级别
//mkdirs():如果上传的文件所在的文件是/a,/b,/c等,直接传到服务器上时,这些文件夹都没有,用mkdirs()就可以自动创建
fileDir.mkdirs();
}
File targetFile = new File(path, uploadFileName); try {
file.transferTo(targetFile);
//将targetFile上传到我们的ftp服务器上
FTPUtil.uploadFile(Lists.newArrayList(targetFile));
//已经上 传到ftp服务器上,删除upload下面的文件
targetFile.delete();
} catch (IOException e) {
logger.error("上传文件异常", e);
return null;
}
return targetFile.getName();
} }

3.写一个工具类FTPUtil,专门做图片上传的工作,在这个工具类中,从properties配置文件中拿到ip,user,pwd,在连接到ftp服务器后,用FTPClient做上传工作。

 public class FTPUtil {

     private static  final Logger logger = LoggerFactory.getLogger(FTPUtil.class);

     //根据key拿到value值
private static String ftpIp = PropertiesUtil.getProperty("ftp.server.ip");
private static String ftpUser = PropertiesUtil.getProperty("ftp.user");
private static String ftpPass = PropertiesUtil.getProperty("ftp.pass"); //构造器
public FTPUtil(String ip,int port,String user,String pwd){
this.ip = ip;
this.port = port;
this.user = user;
this.pwd = pwd;
}
//public开放方法
public static boolean uploadFile(List<File> fileList) throws IOException {
FTPUtil ftpUtil = new FTPUtil(ftpIp,21,ftpUser,ftpPass);
logger.info("开始连接ftp服务器");
//remotePath是"img",也就是传到ftp文件夹下面的img这个文件夹下
boolean result = ftpUtil.uploadFile("img",fileList);
logger.info("ftp服务器,结束上传,上传结果:{}", result);
return result;
}
//上传的具体逻辑
//remotePath:远程路径,ftp服务器上的相对路径,上传到ftp服务器上,ftp服务器是一个文件夹,如果需要上传到这个文件夹下的一个文件夹的话,就需要用到remotePath
private boolean uploadFile(String remotePath,List<File> fileList) throws IOException {
boolean uploaded = true;
FileInputStream fis = null;
//连接FTP服务器
if(connectServer(this.ip,this.port,this.user,this.pwd)){
try {
//更改工作目录,将remotePath传入,如果是null,则不需要切换
ftpClient.changeWorkingDirectory(remotePath);
//设置缓冲区
ftpClient.setBufferSize(1024);
//设置encoding编码
ftpClient.setControlEncoding("UTF-8");
//设置文件类型为二进制类型,防止乱码
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//打开本地的ftp的被动模式
ftpClient.enterLocalPassiveMode();
for(File fileItem : fileList){
fis = new FileInputStream(fileItem);
//将文件存入ftpClient
ftpClient.storeFile(fileItem.getName(),fis);
} } catch (IOException e) {
logger.error("上传文件异常",e);
uploaded = false;
e.printStackTrace();
} finally {
//关闭ftpClient
fis.close();
ftpClient.disconnect();
}
}
return uploaded;
}
//连接ftp服务器
private boolean connectServer(String ip,int port,String user,String pwd){ boolean isSuccess = false;
ftpClient = new FTPClient();
try {
//ftp服务器的ip
ftpClient.connect(ip);
//验证ftp服务器用户验证是否通过
isSuccess = ftpClient.login(user,pwd);
} catch (IOException e) {
logger.error("连接FTP服务器异常",e);
}
return isSuccess;
} private String ip;
private int port;
private String user;
private String pwd;
//使用FTPClient上传下载
private FTPClient ftpClient; public String getIp() {
return ip;
} public void setIp(String ip) {
this.ip = ip;
} public int getPort() {
return port;
} public void setPort(int port) {
this.port = port;
} public String getUser() {
return user;
} public void setUser(String user) {
this.user = user;
} public String getPwd() {
return pwd;
} public void setPwd(String pwd) {
this.pwd = pwd;
} public FTPClient getFtpClient() {
return ftpClient;
} public void setFtpClient(FTPClient ftpClient) {
this.ftpClient = ftpClient;
}
}

4.提供给controller:

         String path = request.getSession().getServletContext().getRealPath("upload");
String targetFileName = iFileService.upload(file, path);
String url = PropertiesUtil.getProperty("ftp.server.http.prefix") + targetFileName;
Map fileMap = Maps.newHashMap();
fileMap.put("uri", targetFileName);
fileMap.put("url", url);
return ServerResponse.createBySuccess(fileMap);

5.在开启ftp服务器后,还需要开启nginx,才能利用nginx反向代理,定位到http://img.mall.com/...

ftp服务器搭建(windows)+实现ftp图片上传对接的更多相关文章

  1. [图床神器]Windows下的图片上传工具MPic

    最近用hexo在github上搭建了一个静态博客,开始几天用起来感觉还挺好的,但是用了些天就觉得每次写文章插入图片就非常麻烦,而且如果图片多了的话上传和访问就很慢了.后来网上看了下发现mac下有款ip ...

  2. 使用阿里云服务器(OOS)实现图片上传

    一: 页面 <%@ page language="java" contentType="text/html; charset=utf-8" pageEnc ...

  3. 图解FTP服务器搭建(Windows Server 2008)

    http://wenku.baidu.com/link?url=aUMoUYvSXKbHdbOHt4lUUCq0BhjnPRTM8jNb80jjwJ4_CM5LFq3lSm6f1ZlPNbFo6HEj ...

  4. 使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,

    一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不 ...

  5. kindeditor图片上传 struts2实现

    一.kindeditor以及struts2部署搭建不再赘述,如需要请参考kindeditor使用方法 Struts2框架搭建 二.kindeditor图片上传所依赖jar包在kindeditor\js ...

  6. FTP服务器搭建以及上传下载的学习

    首先需要搭建FTP服务步骤如下: 1.在win7上先开启ftp服务:这里点击确定后,可能会要等一会儿,完成后有时系统会提示重启 2.打开   计算机-->管理-->   在这里我们可以看见 ...

  7. 【T电商2】ftp服务器搭建

    一.为什么需要ftp? 分布式环境一般都有一个专门的图片服务器存放图片.我们使用虚拟机搭建一个专门的服务器来存放图片.在此服务器上安装一个nginx来提供http服务,安装一个ftp服务器来提供图片上 ...

  8. FTP服务器搭建及操作(一)

    FTP服务器搭建及操作(一) FTP搭建 PHP FTP操作 搭建方法参照(windows):http://www.cnblogs.com/lidan/archive/2012/06/04/25351 ...

  9. (转)【Java FTP及FTP服务器搭建】

    转至 http://blog.csdn.net/studyvcmfc/article/details/8147052 目录(?)[+] -[Java FTP及FTP服务器搭建] 一:本文采用apach ...

随机推荐

  1. SAP(ABAP):STOP,EXIT,CHECK,RETURN,REJECT,CONTINUE

    Stop 命令使用该命令的程序位置INITIALIZATION, AT SELECTION-SCREEN, START-OF-SELECTION和GET 事件中处理说明1. 当在INITIALIZAT ...

  2. PHP.19-验证码生成

    生成验证码 思路:先定义验证码函数getCode() //绘制验证码 $num = 4; //字符长度 getCode($num, 2); 1.创建画布,分配颜色 imagecreatetruecol ...

  3. 4.bootstrap的form表单的form-group和form-control的区别与联系

    1. form-group一般用于div form-control一般用于置于div中的标签元素,为了让控件在各种表单风格中样式不出错,需要添加类名“form-control”,如: <form ...

  4. Quartus 11进行编译Compile Design的时候出现错误near text ã

    1. 设计的工程在Compile Design的时候出现以下的错误,百思不得姐 Error (): Verilog HDL syntax error at div_5.v() near text ã ...

  5. 《Cracking the Coding Interview》——第12章:测试——题目6

    2014-04-25 00:53 题目:你要如何测试一个分布式银行系统的ATM机? 解法:ATM是Automatic Teller Machine,取钱的.我想了半天,没找到什么很清晰的思路,也许是因 ...

  6. CSS系列(8) CSS后代选择器和子选择器详解

    一.CSS后代选择器详解 1,  生动介绍基本概念 一个标签嵌B在另一个标签A内部,B就是A的后代. 而且,B的后代也是A的后代,这就叫“子子孙孙无穷尽也”. 比如: <div> < ...

  7. 不吹不擂,你想要的Python面试都在这里了【315+道题】+精心整理的解答

    Part01-Py基础篇(80) Part02-网络编程和并发(34) Part03-数据库和缓存(46) Part04-前端框架和其他(155) Part01-Py基础篇(80) 1.为什么学习Py ...

  8. Linux认知之旅【06 图形界面上的各种折腾】!

    玩linux免不了折腾,不折腾对不起linux 初次接触, 总会接触到绚丽的linux桌面! 但是随之而来的桌面优化,字体安装,操作习惯都需要一一适应

  9. (转\整)UE4游戏优化 多人大地型游戏的优化(三)GPU的优化

    施主分享随缘,评论随心,@author:白袍小道 小道暗语: 1.因为小道这里博客目录没自己整,暂时就用随笔目录结构,所以二级目录那啥就忽略了.标题格式大致都是(原or转) 二级目录 (标题) 2.因 ...

  10. IntelliJ IDEA 注释模版 输入/**后 不显示配置好的模板

    简单一句话就是 当你在live templetes里配置好以后,记住abbreviation:输入框里的字母 比如我的是cc ,我要想写注释怎么办? 在方法上输入 /*cc 然后按tab键就出来了