sftp 服务器搭建及 文件下载与上传
2017-09-30 10:13
337 查看
// controller方法**********************************************************************************************************************************************************************
@Controller
@RequestMapping(value="${adminPath}/realUserMaterial/realUserMaterial")
public class RealUserMaterialController extends BaseController{
@Autowired
private RealUserMaterialService realUserMaterialService;
private UserMaterialService userMaterialService;
//材料下载
@ResponseBody
@RequestMapping(value="realUserMaterialDown")
public void realUserMaterialDown(@RequestParam(required=false) String id,HttpServletResponse response,HttpServletRequest request) throws IOException{
RealUserMaterial realUserMaterial = null;
if(StringUtils.isNotBlank(id)){
realUserMaterial = realUserMaterialService.get(id);
}
if(null != realUserMaterial){
String fileAddress = realUserMaterial.getFileAddress();
String fileNamelocal = realUserMaterial.getFileName();
byte[] fileContent = UploadFileToServer.downloadFile(fileNamelocal, fileAddress, request);
// 以流的形式下载文件
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + new String(fileNamelocal.getBytes("gb2312"), "ISO8859-1" ) + "\"");
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
toClient.write(fileContent);
toClient.flush();
toClient.close();
}
}
//上传
@ResponseBody
@RequestMapping(value="save")
public String save(UserMaterial userMaterial,MultipartFile file, HttpSession session,HttpServletRequest request){
String id = userMaterial.getId();
try{
userMaterial.setMaterialName(MultipartFileUtil.getfileName(file));
String fileName1=file.getOriginalFilename();
String filehz=fileName1.substring(fileName1.lastIndexOf("."));
String fileName=UserUtils.getUser().getId()+new Date().getTime()+filehz;
byte[] fileEntity=file.getBytes();
UploadFileToServer.uploadFile(fileName, fileEntity, request);
//获取 项目propleties配置文件
use
4000
rMaterial.setFileAddress(Global.getConfig("fileServerUploadPath") + fileName);
UserMaterial temp = userMaterialService.findByidCardAndMaterialid(userMaterial.getUserIdCard(), userMaterial.getUserType(), userMaterial.getMaterialId());
if(null != temp){
userMaterial.setId(temp.getId());
id = temp.getId();
}
if(null != id && !"".equals(id)){
return userMaterialService.update(userMaterial);//保存
} else {
userMaterialService.save(userMaterial);
return userMaterial.getId();
}
} catch(Exception e){
e.printStackTrace();
return "fail";
}
}
}
//一层工具类******************************************************************************************************************************************************************
package com.jeeplus.common.utils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import com.jeeplus.common.config.Global;
import com.jeeplus.modules.material.util.demo;
//上传文件至ftp服务器
public class UploadFileToServer{
private static String fileServerPath = Global.getConfig("fileServerPath");// 文件服务器地址
private static String fileServerPort = Global.getConfig("fileServerPort");// 文件服务器端口
private static String fileServerUserName = Global.getConfig("fileServerUserName");// 文件服务器用户名
private static String fileServerPassword = Global.getConfig("fileServerPassword");// 文件服务器密码
private static String fileServerUploadPath = Global.getConfig("fileServerUploadPath");// 文件服务器上传地址
//文件上传
public static void uploadFile(String fileName, byte[] fileEntity, String filepath){
FileOutputStream fos=null;
File file=new File(filepath);
if(!file.exists()){
file.mkdir();
}
String filepathff=filepath+ File.separator+fileName;
System.out.println(File.separator);
if(fileEntity.length!=0){
file = new File(filepathff);
try {
fos = new FileOutputStream(file);
fos.write(fileEntity, 0, fileEntity.length);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
demo.sftpUpload(fileServerPath, fileServerPort, fileServerUserName, fileServerPassword, fileServerUploadPath, fileName, filepath, fileName);
file.delete();
}
}
//文件上传
public static void uploadFile(String fileName, byte[] fileEntity, HttpServletRequest request){
String filepath = request.getSession().getServletContext().getRealPath("/upload");
FileOutputStream fos=null;
File file=new File(filepath);
if(!file.exists()){
file.mkdir();
}
String filepathff=filepath + File.separator + fileName;
if(fileEntity.length!=0){
file = new File(filepathff);
try {
fos = new FileOutputStream(file);
fos.write(fileEntity, 0, fileEntity.length);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
demo.sftpUpload(fileServerPath, fileServerPort, fileServerUserName, fileServerPassword, fileServerUploadPath, fileName, filepath, fileName);
file.delete();
}
}
//文件下载(二进制流)
public static byte[] downloadFile(String fileName, String filepath,HttpServletRequest request){
String path = request.getSession().getServletContext().getRealPath("/downloadTemp");
String filepathserver = filepath.substring(0, filepath.lastIndexOf("/"));
String fileNameserver = filepath.substring(filepath.lastIndexOf("/"));
File file=new File(path);
if(!file.exists()){
file.mkdir();
}
demo.sftpDownload(fileServerPath, fileServerPort, fileServerUserName, fileServerPassword, filepathserver, fileNameserver, path, fileName);
file = new File(path + File.separator + fileName);
byte[] fileContent = File2byte(file);
boolean flag = false;
while(!flag){
flag = file.delete();
}
return fileContent;
}
//将文件转为二进制
public static byte[] File2byte(File file) {
byte[] buffer = null;
try {
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
bos.close();
buffer = bos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer;
}
}
//二层工具类****************************************************************************************************************************************************************************
package com.jeeplus.modules.material.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.log4j.Logger;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;
public class demo {
private static final Logger logger = Logger.getLogger(demo.class);
/**
* <p>Description: SFTP协议下载文件</p>
* @param ip SFTP服务器IP地址
* @param port SFTP服务器端口 22
* @param username SFTP服务器登录用户名
* @param password SFTP服务器登录密码
* @param remoteFilePath SFTP服务器文件存放目录
* @param remoteFileName SFTP服务器需要下载的文件名
* @param localFilePath 需要下载到本地的路径
* @param localFileName 需要下载到本地的文件名
* @return
* @author tt
* @date 2017年5月11日下午7:06:12
*/
public static Map<String,String> sftpDownload(String ip, String port, String username, String password, String remoteFilePath,
String remoteFileName, String localFilePath, String localFileName) {
Map<String,String> resultMap = new HashMap<String,String>();
//连接SFTP文件服务器
ChannelSftp sftp = getSFTPConnect(ip, Integer.parseInt(port), username, password);
try {
String filePath = remoteFilePath;
String downFilePath = parsePath(remoteFilePath + File.separator + remoteFileName);
sftp.cd(filePath);
if (localFileName == null || "".equals(localFileName)) {
localFileName = remoteFileName;
}
String saveFilePath = parsePath(localFilePath + File.separator + localFileName);
File file = new File(saveFilePath);
//将获取到的文件信息存入 本地下载路径
sftp.get(downFilePath, new FileOutputStream(file));
resultMap.put("filePath", saveFilePath);
} catch (Exception e) {
logger.error("SFTP下载异常", e);
} finally {
//关闭连接SFTP文件服务器
if (sftp != null) {
sftp.disconnect();
}
}
return resultMap;
}
/**
* <p>Description: 获取SFTP连接</p>
* @param host SFTP服务器IP地址
* @param port SFTP服务器端口
* @param username SFTP服务器登录用户名
* @param password SFTP服务器登录密码
* @return
* @author tt
* @date 2017年5月11日下午6:24:45
*/
public static ChannelSftp getSFTPConnect(String ip, int port, String username, String password) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(username, ip, port);
Session sshSession = jsch.getSession(username, ip, port);
logger.debug("Session created.");
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
logger.debug("Session connected.");
logger.debug("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
logger.debug("Connected to " + ip + ".");
// 登录成功
} catch (Exception e) {
logger.error("获取SFTP连接异常", e);
}
return sftp;
}
/**
*
* <p>Description: 格式化路径</p>
* @param path
* @return
* @author tt
* @date 2017年5月11日下午6:44:14
*/
public static String parsePath(String path) {
path = path.replace("//", "/");
path = path.replace("\\", "/");
String parsePath = "";
while (true) {
path = path.replace("//", "/");
path = path.replace("\\", "/");
parsePath = path.replace("//", "/");
parsePath = path.replace("\\", "/");
if (!path.contains("//") && !path.contains("\\")) {
break;
}
}
return parsePath;
}
/**
* <p>Description: 根据文件完整路径URL获取文件信息</p>
* @param url 文件完整路径
* @return map:fileName/filePath/shortFileName/suffix
* @author tt
* @date 2017年5月15日上午9:51:01
*/
public static Map<String, String> getFileInfoMap(String url) {
url = url.replace("/", File.separator);
Map<String, String> map = new HashMap<String, String>();
String fileName = url.substring(url.lastIndexOf(File.separator) + 1);
String filePath = url.substring(0, url.lastIndexOf(File.separator));
String shortFileName = fileName.indexOf(".") > -1 ? fileName.substring(0, fileName.lastIndexOf(".")) : fileName;
String suffix = fileName.indexOf(".") > -1 ? fileName.substring(fileName.lastIndexOf(".") + 1) : "";
// C:\\abc.txt
// 文件名称abc.txt
map.put("fileName", fileName);
// 文件路径C:\\
map.put("filePath", filePath);
// 文件前缀名abc
map.put("shortFileName", shortFileName);
// 文件后缀txt
map.put("suffix", suffix);
return map;
}
/**
* <p>Description: 判断文件夹是否存在</p>
* @param directory 目录名称
* @param sftp
* @return
* @author tt
* @date 2017年5月16日上午10:36:45
*/
public static boolean isDirExist(String directory, ChannelSftp sftp) {
boolean isDirExistFlag = false;
try {
SftpATTRS sftpATTRS = sftp.lstat(directory);
isDirExistFlag = true;
return sftpATTRS.isDir();
} catch (Exception e) {
if (e.getMessage().toLowerCase().equals("no such file")) {
isDirExistFlag = false;
}
}
return isDirExistFlag;
}
/**
* <p>Description: SFTP协议上传文件</p>
* @param ip SFTP服务器IP地址
* @param port SFTP服务器端口
* @param username SFTP服务器登录用户名
* @param password SFTP服务器登录密码
* @param remoteFilePath SFTP服务器文件存放目录
* @param remoteFileName 给上传到SFTP服务器的文件命名
* @param localFilePath 本地文件路径
* @param localFileName 本地文件名
* @return
* @author tt
* @date 2017年5月11日下午7:06:12
*/
public static Map<String,String> sftpUpload(String ip, String port, String username, String password, String remoteFilePath,
String remoteFileName, String localFilePath, String localFileName) {
Map<String,String> resultMap = new HashMap<String,String>();
//连接SFTP文件服务器
ChannelSftp sftp = getSFTPConnect(ip, Integer.parseInt(port), username, password);
FileInputStream in = null;
try {
sftp.cd(remoteFilePath);
if (remoteFileName == null || "".equals(remoteFileName)) {
remoteFileName = localFileName;
}
String uploadFilePath = parsePath(remoteFilePath + File.separator + remoteFileName);
File file = new File(parsePath(localFilePath + File.separator + localFileName));
// 上传文件夹
if (file.isDirectory()) {
File[] fileList = file.listFiles();
try {
sftp.cd(file.getName());
} catch (SftpException e) {
sftp.mkdir(file.getName());
sftp.cd(file.getName());
}
for (int i = 0; i < fileList.length; i++) {
String uploadPath = parsePath(uploadFilePath + File.separator + fileList[i].getName());
in = new FileInputStream(fileList[i]);
sftp.put(in, uploadPath);
in.close();
}
} else {
// 上传文件
in = new FileInputStream(file);
sftp.put(in, uploadFilePath);
}
resultMap.put("filePath", uploadFilePath);
} catch (Exception e) {
logger.error("SFTP上传异常", e);
} finally {
if (sftp != null) {
sftp.disconnect();
try {
sftp.getSession().disconnect();
} catch (JSchException e) {
e.printStackTrace();
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return resultMap;
}
}
//全局工具类 2个*************************************************************************************************************************************************************
/**
* Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
*/
package com.jeeplus.common.config;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Reader;
import java.util.Map;
import java.util.Properties;
import org.apache.ibatis.io.Resources;
import org.springframework.core.io.DefaultResourceLoader;
import com.ckfinder.connector.ServletContextFactory;
import com.google.common.collect.Maps;
import com.jeeplus.common.utils.PropertiesLoader;
import com.jeeplus.common.utils.StringUtils;
/**
* 全局配置类
* @author jeeplus
* @version 2014-06-25
*/
public class Global {
/**
* 当前对象实例
*/
private static Global global = new Global();
/**
* 保存全局属性值
*/
private static Map<String, String> map = Maps.newHashMap();
/**
* 属性文件加载对象
*/
private static PropertiesLoader loader = new PropertiesLoader("jeeplus.properties");
/**
* 显示/隐藏
*/
public static final String SHOW = "1";
public static final String HIDE = "0";
/**
* 是/否
*/
public static final String YES = "1";
public static final String NO = "0";
/**
* 对/错
*/
public static final String TRUE = "true";
public static final String FALSE = "false";
/**
* 上传文件基础虚拟路径
*/
public static final String USERFILES_BASE_URL = "/userfiles/";
/**
* 获取当前对象实例
*/
public static Global getInstance() {
return global;
}
/**
* 获取配置
* @see ${fns:getConfig('adminPath')}
*/
public static String getConfig(String key) {
String value = map.get(key);
if (value == null){
value = loader.getProperty(key);
map.put(key, value != null ? value : StringUtils.EMPTY);
}
return value;
}
/**
* 获取管理端根路径
*/
public static String getAdminPath() {
return getConfig("adminPath");
}
/**
* 获取前端根路径
*/
public static String getFrontPath() {
return getConfig("frontPath");
}
/**
* 获取URL后缀
*/
public static String getUrlSuffix() {
return getConfig("urlSuffix");
}
/**
* 是否是演示模式,演示模式下不能修改用户、角色、密码、菜单、授权
*/
public static Boolean isDemoMode() {
String dm = getConfig("demoMode");
return "true".equals(dm) || "1".equals(dm);
}
/**
* 在修改系统用户和角色时是否同步到Activiti
*/
public static Boolean isSynActivitiIndetity() {
String dm = getConfig("activiti.isSynActivitiIndetity");
return "true".equals(dm) || "1".equals(dm);
}
/**
* 页面获取常量
* @see ${fns:getConst('YES')}
*/
public static Object getConst(String field) {
try {
return Global.class.getField(field).get(null);
} catch (Exception e) {
// 异常代表无配置,这里什么也不做
}
return null;
}
/**
* 获取上传文件的根目录
* @return
*/
public static String getUserfilesBaseDir() {
String dir = getConfig("userfiles.basedir");
if (StringUtils.isBlank(dir)){
try {
dir = ServletContextFactory.getServletContext().getRealPath("/");
} catch (Exception e) {
return "";
}
}
if(!dir.endsWith("/")) {
dir += "/";
}
// System.out.println("userfiles.basedir: " + dir);
return dir;
}
/**
* 获取工程路径
* @return
*/
public static String getProjectPath(){
// 如果配置了工程路径,则直接返回,否则自动获取。
String projectPath = Global.getConfig("projectPath");
if (StringUtils.isNotBlank(projectPath)){
return projectPath;
}
try {
File file = new DefaultResourceLoader().getResource("").getFile();
if (file != null){
while(true){
File f = new File(file.getPath() + File.separator + "src" + File.separator + "main");
if (f == null || f.exists()){
break;
}
if (file.getParentFile() != null){
file = file.getParentFile();
}else{
break;
}
}
projectPath = file.toString();
}
} catch (IOException e) {
e.printStackTrace();
}
return projectPath;
}
/**
* 写入properties信息
*
* @param key
* 名称
* @param value
* 值
*/
public static void modifyConfig(String key, String value) {
try {
// 从输入流中读取属性列表(键和元素对)
Properties prop = getProperties();
prop.setProperty(key, value);
String path = Global.class.getResource("/jeeplus.properties").getPath();
FileOutputStream outputFile = new FileOutputStream(path);
prop.store(outputFile, "modify");
outputFile.close();
outputFile.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 返回 Properties
* @param fileName 文件名 (注意:加载的是src下的文件,如果在某个包下.请把包名加上)
* @param
* @return
*/
public static Properties getProperties(){
Properties prop = new Properties();
try {
Reader reader = Resources.getResourceAsReader("/jeeplus.properties");
prop.load(reader);
} catch (Exception e) {
return null;
}
return prop;
}
}
// propleties配置文件********************************************************************************************************************************************************
fileServerPath=127.0.0.1
fileServerPort=22
fileServerUserName=username
fileServerPassword=password
fileServerUploadPath=/ #该路径是在ftp服务器根目录基础上的路径,比如 若ftp服务器根目录为F:/ftp/upload,此处只需配置路径为‘/’
//另外说明:*****************************************************************************************************************************************************************
使用ftp 工具为Serv-U,博客内我有上传;
jeeplus为我的项目名;
@Controller
@RequestMapping(value="${adminPath}/realUserMaterial/realUserMaterial")
public class RealUserMaterialController extends BaseController{
@Autowired
private RealUserMaterialService realUserMaterialService;
private UserMaterialService userMaterialService;
//材料下载
@ResponseBody
@RequestMapping(value="realUserMaterialDown")
public void realUserMaterialDown(@RequestParam(required=false) String id,HttpServletResponse response,HttpServletRequest request) throws IOException{
RealUserMaterial realUserMaterial = null;
if(StringUtils.isNotBlank(id)){
realUserMaterial = realUserMaterialService.get(id);
}
if(null != realUserMaterial){
String fileAddress = realUserMaterial.getFileAddress();
String fileNamelocal = realUserMaterial.getFileName();
byte[] fileContent = UploadFileToServer.downloadFile(fileNamelocal, fileAddress, request);
// 以流的形式下载文件
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + new String(fileNamelocal.getBytes("gb2312"), "ISO8859-1" ) + "\"");
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
toClient.write(fileContent);
toClient.flush();
toClient.close();
}
}
//上传
@ResponseBody
@RequestMapping(value="save")
public String save(UserMaterial userMaterial,MultipartFile file, HttpSession session,HttpServletRequest request){
String id = userMaterial.getId();
try{
userMaterial.setMaterialName(MultipartFileUtil.getfileName(file));
String fileName1=file.getOriginalFilename();
String filehz=fileName1.substring(fileName1.lastIndexOf("."));
String fileName=UserUtils.getUser().getId()+new Date().getTime()+filehz;
byte[] fileEntity=file.getBytes();
UploadFileToServer.uploadFile(fileName, fileEntity, request);
//获取 项目propleties配置文件
use
4000
rMaterial.setFileAddress(Global.getConfig("fileServerUploadPath") + fileName);
UserMaterial temp = userMaterialService.findByidCardAndMaterialid(userMaterial.getUserIdCard(), userMaterial.getUserType(), userMaterial.getMaterialId());
if(null != temp){
userMaterial.setId(temp.getId());
id = temp.getId();
}
if(null != id && !"".equals(id)){
return userMaterialService.update(userMaterial);//保存
} else {
userMaterialService.save(userMaterial);
return userMaterial.getId();
}
} catch(Exception e){
e.printStackTrace();
return "fail";
}
}
}
//一层工具类******************************************************************************************************************************************************************
package com.jeeplus.common.utils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import com.jeeplus.common.config.Global;
import com.jeeplus.modules.material.util.demo;
//上传文件至ftp服务器
public class UploadFileToServer{
private static String fileServerPath = Global.getConfig("fileServerPath");// 文件服务器地址
private static String fileServerPort = Global.getConfig("fileServerPort");// 文件服务器端口
private static String fileServerUserName = Global.getConfig("fileServerUserName");// 文件服务器用户名
private static String fileServerPassword = Global.getConfig("fileServerPassword");// 文件服务器密码
private static String fileServerUploadPath = Global.getConfig("fileServerUploadPath");// 文件服务器上传地址
//文件上传
public static void uploadFile(String fileName, byte[] fileEntity, String filepath){
FileOutputStream fos=null;
File file=new File(filepath);
if(!file.exists()){
file.mkdir();
}
String filepathff=filepath+ File.separator+fileName;
System.out.println(File.separator);
if(fileEntity.length!=0){
file = new File(filepathff);
try {
fos = new FileOutputStream(file);
fos.write(fileEntity, 0, fileEntity.length);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
demo.sftpUpload(fileServerPath, fileServerPort, fileServerUserName, fileServerPassword, fileServerUploadPath, fileName, filepath, fileName);
file.delete();
}
}
//文件上传
public static void uploadFile(String fileName, byte[] fileEntity, HttpServletRequest request){
String filepath = request.getSession().getServletContext().getRealPath("/upload");
FileOutputStream fos=null;
File file=new File(filepath);
if(!file.exists()){
file.mkdir();
}
String filepathff=filepath + File.separator + fileName;
if(fileEntity.length!=0){
file = new File(filepathff);
try {
fos = new FileOutputStream(file);
fos.write(fileEntity, 0, fileEntity.length);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
demo.sftpUpload(fileServerPath, fileServerPort, fileServerUserName, fileServerPassword, fileServerUploadPath, fileName, filepath, fileName);
file.delete();
}
}
//文件下载(二进制流)
public static byte[] downloadFile(String fileName, String filepath,HttpServletRequest request){
String path = request.getSession().getServletContext().getRealPath("/downloadTemp");
String filepathserver = filepath.substring(0, filepath.lastIndexOf("/"));
String fileNameserver = filepath.substring(filepath.lastIndexOf("/"));
File file=new File(path);
if(!file.exists()){
file.mkdir();
}
demo.sftpDownload(fileServerPath, fileServerPort, fileServerUserName, fileServerPassword, filepathserver, fileNameserver, path, fileName);
file = new File(path + File.separator + fileName);
byte[] fileContent = File2byte(file);
boolean flag = false;
while(!flag){
flag = file.delete();
}
return fileContent;
}
//将文件转为二进制
public static byte[] File2byte(File file) {
byte[] buffer = null;
try {
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
bos.close();
buffer = bos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer;
}
}
//二层工具类****************************************************************************************************************************************************************************
package com.jeeplus.modules.material.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.log4j.Logger;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;
public class demo {
private static final Logger logger = Logger.getLogger(demo.class);
/**
* <p>Description: SFTP协议下载文件</p>
* @param ip SFTP服务器IP地址
* @param port SFTP服务器端口 22
* @param username SFTP服务器登录用户名
* @param password SFTP服务器登录密码
* @param remoteFilePath SFTP服务器文件存放目录
* @param remoteFileName SFTP服务器需要下载的文件名
* @param localFilePath 需要下载到本地的路径
* @param localFileName 需要下载到本地的文件名
* @return
* @author tt
* @date 2017年5月11日下午7:06:12
*/
public static Map<String,String> sftpDownload(String ip, String port, String username, String password, String remoteFilePath,
String remoteFileName, String localFilePath, String localFileName) {
Map<String,String> resultMap = new HashMap<String,String>();
//连接SFTP文件服务器
ChannelSftp sftp = getSFTPConnect(ip, Integer.parseInt(port), username, password);
try {
String filePath = remoteFilePath;
String downFilePath = parsePath(remoteFilePath + File.separator + remoteFileName);
sftp.cd(filePath);
if (localFileName == null || "".equals(localFileName)) {
localFileName = remoteFileName;
}
String saveFilePath = parsePath(localFilePath + File.separator + localFileName);
File file = new File(saveFilePath);
//将获取到的文件信息存入 本地下载路径
sftp.get(downFilePath, new FileOutputStream(file));
resultMap.put("filePath", saveFilePath);
} catch (Exception e) {
logger.error("SFTP下载异常", e);
} finally {
//关闭连接SFTP文件服务器
if (sftp != null) {
sftp.disconnect();
}
}
return resultMap;
}
/**
* <p>Description: 获取SFTP连接</p>
* @param host SFTP服务器IP地址
* @param port SFTP服务器端口
* @param username SFTP服务器登录用户名
* @param password SFTP服务器登录密码
* @return
* @author tt
* @date 2017年5月11日下午6:24:45
*/
public static ChannelSftp getSFTPConnect(String ip, int port, String username, String password) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(username, ip, port);
Session sshSession = jsch.getSession(username, ip, port);
logger.debug("Session created.");
sshSession.setPassword(password);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
logger.debug("Session connected.");
logger.debug("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
logger.debug("Connected to " + ip + ".");
// 登录成功
} catch (Exception e) {
logger.error("获取SFTP连接异常", e);
}
return sftp;
}
/**
*
* <p>Description: 格式化路径</p>
* @param path
* @return
* @author tt
* @date 2017年5月11日下午6:44:14
*/
public static String parsePath(String path) {
path = path.replace("//", "/");
path = path.replace("\\", "/");
String parsePath = "";
while (true) {
path = path.replace("//", "/");
path = path.replace("\\", "/");
parsePath = path.replace("//", "/");
parsePath = path.replace("\\", "/");
if (!path.contains("//") && !path.contains("\\")) {
break;
}
}
return parsePath;
}
/**
* <p>Description: 根据文件完整路径URL获取文件信息</p>
* @param url 文件完整路径
* @return map:fileName/filePath/shortFileName/suffix
* @author tt
* @date 2017年5月15日上午9:51:01
*/
public static Map<String, String> getFileInfoMap(String url) {
url = url.replace("/", File.separator);
Map<String, String> map = new HashMap<String, String>();
String fileName = url.substring(url.lastIndexOf(File.separator) + 1);
String filePath = url.substring(0, url.lastIndexOf(File.separator));
String shortFileName = fileName.indexOf(".") > -1 ? fileName.substring(0, fileName.lastIndexOf(".")) : fileName;
String suffix = fileName.indexOf(".") > -1 ? fileName.substring(fileName.lastIndexOf(".") + 1) : "";
// C:\\abc.txt
// 文件名称abc.txt
map.put("fileName", fileName);
// 文件路径C:\\
map.put("filePath", filePath);
// 文件前缀名abc
map.put("shortFileName", shortFileName);
// 文件后缀txt
map.put("suffix", suffix);
return map;
}
/**
* <p>Description: 判断文件夹是否存在</p>
* @param directory 目录名称
* @param sftp
* @return
* @author tt
* @date 2017年5月16日上午10:36:45
*/
public static boolean isDirExist(String directory, ChannelSftp sftp) {
boolean isDirExistFlag = false;
try {
SftpATTRS sftpATTRS = sftp.lstat(directory);
isDirExistFlag = true;
return sftpATTRS.isDir();
} catch (Exception e) {
if (e.getMessage().toLowerCase().equals("no such file")) {
isDirExistFlag = false;
}
}
return isDirExistFlag;
}
/**
* <p>Description: SFTP协议上传文件</p>
* @param ip SFTP服务器IP地址
* @param port SFTP服务器端口
* @param username SFTP服务器登录用户名
* @param password SFTP服务器登录密码
* @param remoteFilePath SFTP服务器文件存放目录
* @param remoteFileName 给上传到SFTP服务器的文件命名
* @param localFilePath 本地文件路径
* @param localFileName 本地文件名
* @return
* @author tt
* @date 2017年5月11日下午7:06:12
*/
public static Map<String,String> sftpUpload(String ip, String port, String username, String password, String remoteFilePath,
String remoteFileName, String localFilePath, String localFileName) {
Map<String,String> resultMap = new HashMap<String,String>();
//连接SFTP文件服务器
ChannelSftp sftp = getSFTPConnect(ip, Integer.parseInt(port), username, password);
FileInputStream in = null;
try {
sftp.cd(remoteFilePath);
if (remoteFileName == null || "".equals(remoteFileName)) {
remoteFileName = localFileName;
}
String uploadFilePath = parsePath(remoteFilePath + File.separator + remoteFileName);
File file = new File(parsePath(localFilePath + File.separator + localFileName));
// 上传文件夹
if (file.isDirectory()) {
File[] fileList = file.listFiles();
try {
sftp.cd(file.getName());
} catch (SftpException e) {
sftp.mkdir(file.getName());
sftp.cd(file.getName());
}
for (int i = 0; i < fileList.length; i++) {
String uploadPath = parsePath(uploadFilePath + File.separator + fileList[i].getName());
in = new FileInputStream(fileList[i]);
sftp.put(in, uploadPath);
in.close();
}
} else {
// 上传文件
in = new FileInputStream(file);
sftp.put(in, uploadFilePath);
}
resultMap.put("filePath", uploadFilePath);
} catch (Exception e) {
logger.error("SFTP上传异常", e);
} finally {
if (sftp != null) {
sftp.disconnect();
try {
sftp.getSession().disconnect();
} catch (JSchException e) {
e.printStackTrace();
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return resultMap;
}
}
//全局工具类 2个*************************************************************************************************************************************************************
/**
* Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
*/
package com.jeeplus.common.config;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Reader;
import java.util.Map;
import java.util.Properties;
import org.apache.ibatis.io.Resources;
import org.springframework.core.io.DefaultResourceLoader;
import com.ckfinder.connector.ServletContextFactory;
import com.google.common.collect.Maps;
import com.jeeplus.common.utils.PropertiesLoader;
import com.jeeplus.common.utils.StringUtils;
/**
* 全局配置类
* @author jeeplus
* @version 2014-06-25
*/
public class Global {
/**
* 当前对象实例
*/
private static Global global = new Global();
/**
* 保存全局属性值
*/
private static Map<String, String> map = Maps.newHashMap();
/**
* 属性文件加载对象
*/
private static PropertiesLoader loader = new PropertiesLoader("jeeplus.properties");
/**
* 显示/隐藏
*/
public static final String SHOW = "1";
public static final String HIDE = "0";
/**
* 是/否
*/
public static final String YES = "1";
public static final String NO = "0";
/**
* 对/错
*/
public static final String TRUE = "true";
public static final String FALSE = "false";
/**
* 上传文件基础虚拟路径
*/
public static final String USERFILES_BASE_URL = "/userfiles/";
/**
* 获取当前对象实例
*/
public static Global getInstance() {
return global;
}
/**
* 获取配置
* @see ${fns:getConfig('adminPath')}
*/
public static String getConfig(String key) {
String value = map.get(key);
if (value == null){
value = loader.getProperty(key);
map.put(key, value != null ? value : StringUtils.EMPTY);
}
return value;
}
/**
* 获取管理端根路径
*/
public static String getAdminPath() {
return getConfig("adminPath");
}
/**
* 获取前端根路径
*/
public static String getFrontPath() {
return getConfig("frontPath");
}
/**
* 获取URL后缀
*/
public static String getUrlSuffix() {
return getConfig("urlSuffix");
}
/**
* 是否是演示模式,演示模式下不能修改用户、角色、密码、菜单、授权
*/
public static Boolean isDemoMode() {
String dm = getConfig("demoMode");
return "true".equals(dm) || "1".equals(dm);
}
/**
* 在修改系统用户和角色时是否同步到Activiti
*/
public static Boolean isSynActivitiIndetity() {
String dm = getConfig("activiti.isSynActivitiIndetity");
return "true".equals(dm) || "1".equals(dm);
}
/**
* 页面获取常量
* @see ${fns:getConst('YES')}
*/
public static Object getConst(String field) {
try {
return Global.class.getField(field).get(null);
} catch (Exception e) {
// 异常代表无配置,这里什么也不做
}
return null;
}
/**
* 获取上传文件的根目录
* @return
*/
public static String getUserfilesBaseDir() {
String dir = getConfig("userfiles.basedir");
if (StringUtils.isBlank(dir)){
try {
dir = ServletContextFactory.getServletContext().getRealPath("/");
} catch (Exception e) {
return "";
}
}
if(!dir.endsWith("/")) {
dir += "/";
}
// System.out.println("userfiles.basedir: " + dir);
return dir;
}
/**
* 获取工程路径
* @return
*/
public static String getProjectPath(){
// 如果配置了工程路径,则直接返回,否则自动获取。
String projectPath = Global.getConfig("projectPath");
if (StringUtils.isNotBlank(projectPath)){
return projectPath;
}
try {
File file = new DefaultResourceLoader().getResource("").getFile();
if (file != null){
while(true){
File f = new File(file.getPath() + File.separator + "src" + File.separator + "main");
if (f == null || f.exists()){
break;
}
if (file.getParentFile() != null){
file = file.getParentFile();
}else{
break;
}
}
projectPath = file.toString();
}
} catch (IOException e) {
e.printStackTrace();
}
return projectPath;
}
/**
* 写入properties信息
*
* @param key
* 名称
* @param value
* 值
*/
public static void modifyConfig(String key, String value) {
try {
// 从输入流中读取属性列表(键和元素对)
Properties prop = getProperties();
prop.setProperty(key, value);
String path = Global.class.getResource("/jeeplus.properties").getPath();
FileOutputStream outputFile = new FileOutputStream(path);
prop.store(outputFile, "modify");
outputFile.close();
outputFile.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 返回 Properties
* @param fileName 文件名 (注意:加载的是src下的文件,如果在某个包下.请把包名加上)
* @param
* @return
*/
public static Properties getProperties(){
Properties prop = new Properties();
try {
Reader reader = Resources.getResourceAsReader("/jeeplus.properties");
prop.load(reader);
} catch (Exception e) {
return null;
}
return prop;
}
}
// propleties配置文件********************************************************************************************************************************************************
fileServerPath=127.0.0.1
fileServerPort=22
fileServerUserName=username
fileServerPassword=password
fileServerUploadPath=/ #该路径是在ftp服务器根目录基础上的路径,比如 若ftp服务器根目录为F:/ftp/upload,此处只需配置路径为‘/’
//另外说明:*****************************************************************************************************************************************************************
使用ftp 工具为Serv-U,博客内我有上传;
jeeplus为我的项目名;
相关文章推荐
- java 通过sftp服务器上传下载删除文件
- 使用springmvc 和nginx 搭建一个文件上传下载服务器
- Linux 系统下 ftp 服务器的搭建,及文件配置,上传下载等
- java 通过sftp服务器上传下载删除文件
- Java连接SFTP服务器下载上传文件
- nginx搭建文件上传下载服务器
- jsch实现sftp服务器的文件时上传下载
- window服务器通过sftp从linux下载文件,并ftp上传到window服务器
- Android FTP服务器搭建与文件上传及下载
- 用C#连接SFTP服务器并进行上传下载文件
- Java使用SFTP连接服务器上传、下载文件
- **SecureCRT用 Sftp 4000 会话框 从服务器上传或下载文件**
- 本地windows机器和远程Linux服务器之间文件传输 -- Xshell 使用sftp 上传下载文件
- web服务器搭建之利用pscp进行文件的上传下载
- Openssh服务器的搭建,并使用PSFTP实现文件自动上传,下载的script命令
- 搭建apache2服务器实现文件的上传下载
- 上传、下载服务器文件
- Android与与服务器交换数据、上传、下载、读取文件
- JAVA SFTP文件上传、下载及批量下载实例