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图片上传对接的更多相关文章
-
[图床神器]Windows下的图片上传工具MPic
最近用hexo在github上搭建了一个静态博客,开始几天用起来感觉还挺好的,但是用了些天就觉得每次写文章插入图片就非常麻烦,而且如果图片多了的话上传和访问就很慢了.后来网上看了下发现mac下有款ip ...
-
使用阿里云服务器(OOS)实现图片上传
一: 页面 <%@ page language="java" contentType="text/html; charset=utf-8" pageEnc ...
-
图解FTP服务器搭建(Windows Server 2008)
http://wenku.baidu.com/link?url=aUMoUYvSXKbHdbOHt4lUUCq0BhjnPRTM8jNb80jjwJ4_CM5LFq3lSm6f1ZlPNbFo6HEj ...
-
使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,
一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不 ...
-
kindeditor图片上传 struts2实现
一.kindeditor以及struts2部署搭建不再赘述,如需要请参考kindeditor使用方法 Struts2框架搭建 二.kindeditor图片上传所依赖jar包在kindeditor\js ...
-
FTP服务器搭建以及上传下载的学习
首先需要搭建FTP服务步骤如下: 1.在win7上先开启ftp服务:这里点击确定后,可能会要等一会儿,完成后有时系统会提示重启 2.打开 计算机-->管理--> 在这里我们可以看见 ...
-
【T电商2】ftp服务器搭建
一.为什么需要ftp? 分布式环境一般都有一个专门的图片服务器存放图片.我们使用虚拟机搭建一个专门的服务器来存放图片.在此服务器上安装一个nginx来提供http服务,安装一个ftp服务器来提供图片上 ...
-
FTP服务器搭建及操作(一)
FTP服务器搭建及操作(一) FTP搭建 PHP FTP操作 搭建方法参照(windows):http://www.cnblogs.com/lidan/archive/2012/06/04/25351 ...
-
(转)【Java FTP及FTP服务器搭建】
转至 http://blog.csdn.net/studyvcmfc/article/details/8147052 目录(?)[+] -[Java FTP及FTP服务器搭建] 一:本文采用apach ...
随机推荐
-
ArcGIS中的坐标系统定义与投影转换【转】
ArcGIS中的坐标系统定义与投影转换 坐标系统是GIS数据重要的数学基础,用于表示地理要素.图像和观测结果的参照系统,坐标系统的定义能够保证地理数据在软件中正确的显示其位置.方向和距离,缺少坐标系统 ...
-
ssh An internal error occured during ";Add Deployment";
这个问题一般是由于导入别人做的项目,但是项目所用的jdk跟当前所用的jdk不一样. 以前遇到过这个问题没有解决,今天解决了. 右键项目名→Properties→Java Build Path→Libr ...
-
Mybatis JPA 代码构建
前段时间了解到Spring JPA,感觉挺好用,但其依赖于Hibernate,本人看到Hibernate就头大(不是说Hibernate不好哈,而是进阶太难),于是做了一个迷你版的Mybatis JP ...
-
Python 中if的使用
reference : https://docs.python.org/3/reference/expressions.html#conditional-expressions 6.11. Cond ...
-
C# 托管内存与非托管内存之间的转换
c#有自己的内存回收机制,所以在c#中我们可以只new,不用关心怎样delete,c#使用gc来清理内存,这部分内存就是managed memory,大部分时候我们工作于c#环境中,都是在使用托管内存 ...
-
利用ligerUI隐藏某列,并不产生空白列的方法
var grid;//声明变量 $(function () { //grid初始化 grid = $("#maingrid4").ligerGrid({ columns: [ { ...
-
Pycharm 问题:Clear Read-Only Status
用的是ubuntu系统,一直在普通用户模式下打开Git下建的项目,今天运行神经网络程序时,由于有一个cudnn错误,必须要在sudo模式下才不会报错,所以用sudo试着打开了pycharm,发现是完全 ...
-
常见的C语言内存错误及对策(转)
http://see.xidian.edu.cn/cpp/html/483.html 一.指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存.浅显的例子就 ...
-
13 Stream Processing Patterns for building Streaming and Realtime Applications
原文:https://iwringer.wordpress.com/2015/08/03/patterns-for-streaming-realtime-analytics/ Introduction ...
-
Vue 表单
1.v-model v-model不再关心初始化的value值. <!DOCTYPE html> <html lang="zh"> <head> ...