package com.publiccms.logic.component;
import static com.publiccms.logic.component.SiteComponent.STATIC_FILE_PATH_RESOURCE;
import static com.publiccms.logic.component.SiteComponent.STATIC_FILE_PATH_WEB;
import static com.publiccms.logic.component.SiteComponent.TASK_FILE_PATH;
import static com.publiccms.logic.component.SiteComponent.TEMPLATE_PATH;
import static com.publiccms.logic.component.SiteComponent.getFullFileName;
import static com.sanluan.common.tools.StreamUtils.write;
import static com.sanluan.common.tools.VerificationUtils.encode;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import javax.annotation.PreDestroy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import com.publiccms.entities.sys.SysFtpUser;
import com.publiccms.entities.sys.SysSite;
import com.publiccms.logic.service.sys.SysFtpUserService;
import com.publiccms.logic.service.sys.SysSiteService;
import com.sanluan.common.base.Base;
@Component
public class FtpComponent extends Base {
public static final String DATE_FORMAT = "yyyyMMddHHmmss";
public static final String LIST_DATE_FORMAT = "MMM dd HH:mm";
public static final String LIST_DATE_FORMAT1 = "MMM dd yyyy";
public static final String ROOT = SEPARATOR;
public static final String[] VIRTUAL_FILE_PATHS = { STATIC_FILE_PATH_WEB, STATIC_FILE_PATH_RESOURCE, TASK_FILE_PATH,
TEMPLATE_PATH };
private FtpServer ftpServer;
@Autowired
public void createFtpServer(SysFtpUserService service, SysSiteService siteService, SiteComponent siteComponent,
Environment env) {
if ("true".equalsIgnoreCase(env.getProperty("ftp.enable", "true"))) {
try {
ftpServer = new FtpServer(siteComponent.getRootPath(), 21, service, siteService);
} catch (IOException e) {
log.error("Ftp Start Error :" + e.getMessage());
}
}
}
@PreDestroy
public void close() {
if (notEmpty(ftpServer)) {
ftpServer.stop();
}
}
public class FtpServer implements Runnable {
private SysFtpUserService service;
private SysSiteService siteService;
private ServerSocket serverSocket;
private String rootPath;
public FtpServer(String rootPath, int port, SysFtpUserService service, SysSiteService siteService) throws IOException {
this.rootPath = rootPath;
this.service = service;
this.siteService = siteService;
serverSocket = new ServerSocket(port);
log.info("Ftp Listen on " + port);
new Thread(this).start();
}
public void stop() {
try {
serverSocket.close();
} catch (IOException e) {
log.error(e.getMessage());
}
}
@Override
public void run() {
while (!serverSocket.isClosed()) {
try {
new Thread(new FtpHandler(serverSocket.accept(), rootPath, this)).start();
} catch (IOException e) {
log.error(e.getMessage());
}
}
}
public SysSite getSite(int siteId) {
return siteService.getEntity(siteId);
}
public SysFtpUser getUser(String username) {
return service.findByName(username);
}
}
class FtpHandler extends Base implements Runnable {
private FtpServer server;
private Socket socket; // 用于控制的套接字
private Socket transportSocket; // 用于传输的套接字
private ServerSocket transportServerSocket; // 用于传输的套接字
private boolean isPasv = false;
private SysFtpUser user;
private SysSite site;
private String userPath;
private String currentPath = ROOT;// 当前目录
private String rootPath; // 根目录
private int state = State.STATE_NEED_USERNAME; // 用户状态标识符,在checkPASS中设置
private BufferedReader input;
private PrintWriter output;
private int type = 0; // 文件类型(ascII 或 bin)
public FtpHandler(Socket socket, String rootPath, FtpServer ftpServer) {
this.socket = socket;
this.rootPath = rootPath;
this.server = ftpServer;
try {
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
output = new PrintWriter(socket.getOutputStream(), true);
} catch (IOException e) {
log.error("The ftp server start error:" + e.getMessage());
}
}
@Override
public void run() {
try {
boolean flag = true;
String inputString;
pirnt("332 welcome to ThinServer.");
output.flush();
while (flag && null != (inputString = input.readLine())) {
String command;
String param = BLANK;
int index = inputString.indexOf(BLANK_SPACE);
if (-1 == index) {
command = inputString.toUpperCase();
} else {
command = inputString.substring(0, index).toUpperCase();
if (index < inputString.length()) {
param = inputString.substring(index + 1, inputString.length());
}
}
switch (state) {
case State.STATE_NEED_USERNAME:
flag = checkUsername(command, param);
break;
case State.STATE_NEED_PASSWORD:
flag = checkPassword(command, param);
break;
case State.STATE_READY:
switch (command) {
case "ABOR": // 中断数据连接程序
try {
if (notEmpty(transportSocket)) {
transportSocket.close();
if (isPasv) {
transportServerSocket.close();
}
}
} catch (Exception e) {
pirnt("451 failed to send.");
}
pirnt("421 service unavailable.");
break;
case "ACCT":// 系统特权帐号
pirnt("500 command not supported.");
break;
case "ALLO":// 为服务器上的文件存储器分配字节
pirnt("500 command not supported.");
break;
case "APPE":// 添加文件到服务器同名文件
pirnt("500 command not supported.");
break;
case "CDUP":// 到上一层目录
changeCurrentPath("..");
break;
case "CWD": // 到指定的目录
changeCurrentPath(param);
break;
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
java+spring+hibernate+jquery+mysql后台管理系统CMS源码,系统经多次测试,运行无误,大家放心下载
资源推荐
资源详情
资源评论
收起资源包目录
java+spring+hibernate+jquery+mysql后台管理系统CMS源码 (2000个子文件)
TemplateComponent.class 18KB
TemplateComponent.class 18KB
CmsContentAdminController.class 18KB
CmsContentAdminController.class 18KB
FtpComponent$FtpHandler.class 17KB
FtpComponent$FtpHandler.class 17KB
BaseDao.class 16KB
BaseDao.class 16KB
UeditorAdminController.class 13KB
UeditorAdminController.class 13KB
CmsCategoryAdminController.class 12KB
CmsCategoryAdminController.class 12KB
ContentController.class 12KB
ContentController.class 12KB
CmsTemplateAdminController.class 11KB
CmsTemplateAdminController.class 11KB
CmsContent.class 10KB
CmsContent.class 10KB
LoginController.class 10KB
LoginController.class 10KB
SourceMaker.class 9KB
SourceMaker.class 9KB
CmsContentService.class 9KB
CmsContentService.class 9KB
StatisticsComponent.class 9KB
StatisticsComponent.class 9KB
SiteComponent.class 9KB
SiteComponent.class 9KB
PlaceController.class 9KB
PlaceController.class 9KB
UserController.class 9KB
UserController.class 9KB
CmsContentDao.class 8KB
CmsContentDao.class 8KB
TemplateDirectiveHandler.class 8KB
TemplateDirectiveHandler.class 8KB
AppController.class 8KB
AppController.class 8KB
AbstractController.class 8KB
AbstractController.class 8KB
EmailComponent.class 8KB
EmailComponent.class 8KB
CmsPlaceAdminController.class 8KB
CmsPlaceAdminController.class 8KB
ChangyanController.class 7KB
ChangyanController.class 7KB
ScheduledTask.class 7KB
ScheduledTask.class 7KB
MetadataComponent.class 7KB
MetadataComponent.class 7KB
CmsCategory.class 7KB
CmsCategory.class 7KB
SysTaskAdminController.class 7KB
SysTaskAdminController.class 7KB
SysUserAdminController.class 7KB
SysUserAdminController.class 7KB
AdminContextInterceptor.class 7KB
AdminContextInterceptor.class 7KB
LoginAdminController.class 7KB
LoginAdminController.class 7KB
ConfigComponent.class 6KB
ConfigComponent.class 6KB
SysSiteAdminController.class 6KB
SysSiteAdminController.class 6KB
SysRoleAdminController.class 6KB
SysRoleAdminController.class 6KB
UeditorConfig.class 6KB
UeditorConfig.class 6KB
PublishPageDirective.class 6KB
PublishPageDirective.class 6KB
SysMoudleAdminController.class 6KB
SysMoudleAdminController.class 6KB
BaseHandler.class 6KB
BaseHandler.class 6KB
PluginLottery.class 6KB
PluginLottery.class 6KB
SysUser.class 6KB
SysUser.class 6KB
CmsCategoryTypeAdminController.class 6KB
CmsCategoryTypeAdminController.class 6KB
DirectiveController.class 6KB
DirectiveController.class 6KB
IndexController.class 6KB
IndexController.class 6KB
BaseController.class 6KB
BaseController.class 6KB
TemplateModelUtils.class 6KB
TemplateModelUtils.class 6KB
HttpParameterHandler.class 6KB
HttpParameterHandler.class 6KB
CmsCategoryService.class 6KB
CmsCategoryService.class 6KB
CmsPlace.class 5KB
CmsPlace.class 5KB
FileComponent.class 5KB
FileComponent.class 5KB
SysConfigController.class 5KB
SysConfigController.class 5KB
ZipUtils.class 5KB
ZipUtils.class 5KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
reg183
- 粉丝: 1811
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功