1、要实现ftp文件上传和下载,需要下载一个jar包,下载地址:http://download.csdn.net/detail/harderxin/5489309
2、实现代码:
package com.image.common.util;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifSubIFDDirectory;
import com.enterprisedt.net.ftp.FTPConnectMode;
import com.enterprisedt.net.ftp.FTPTransferType;
import com.enterprisedt.net.ftp.FileTransferClient;
import com.enterprisedt.net.ftp.FileTransferInputStream;
import com.enterprisedt.net.ftp.FileTransferOutputStream;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* FTP
*
* @author Administrator
*
*/
public class FTPUnit {
public static final SimpleDateFormat YMDHMS_SDFORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 初始化连接
* @param url FTP服务端IP地址 如,192.168.1.254
* @param port FTP服务端端口 如,21
* @param username 用户名
* @param password 密码
* @return
* @throws Exception
*/
public static FileTransferClient getFileTransferClient(String url,Integer port,String username,String password) throws Exception {
FileTransferClient ftp = new FileTransferClient();
ftp.setRemoteHost(url);
ftp.setRemotePort(port);
ftp.setUserName(username);
ftp.setPassword(password);
ftp.getAdvancedSettings().setControlEncoding("UTF-8");
ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.PASV);// 被动模式,数据连接由客户端发起
ftp.setContentType(FTPTransferType.BINARY); // BINARY模式用来传送可执行文件,压缩文件,和图片文件.
ftp.connect();
return ftp;
}
/**
* 关闭FTP
*/
public static void closeFileTransferClient(FileTransferClient ftp)throws Exception{
if(ftp!=null && ftp.isConnected()){
ftp.disconnect();
}
}
/**
* 上传单个文件
* @param localFilePath 本地文件路径
* @param remoteFilePath 远程存放路径
* @param folderPath 存放文件的路径 /车型/车号/类型拼音/年/月/日/
*/
public static void upload(String localFilePath, String remoteFileName,String folderPath,FileTransferClient ftp) throws Exception {
createDirectory(ftp, folderPath);
ftp.uploadFile(localFilePath, folderPath + remoteFileName);
}
/**
* 上传多个文件
* @localFilePathArr 本地文件路径
* @remoteFilePathArr 远程服务器文件存放路径
* @folderPath 远程服务器存放文件的文件夹
* @ftp ftp客服端连接
*/
public static void upload(String[] localFilePathArr,String[] remoteFilePathArr, String folderPath,FileTransferClient ftp) throws Exception {
try{
createDirectory(ftp, folderPath);
for (int i = 0; i < localFilePathArr.length; i++) {
ftp.uploadFile(localFilePathArr[i], remoteFilePathArr[i]);
}
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 下载单个文件
* @param localFilePath 本地文件路径
* @param remoteFilePath 远程存放路径
*/
public static void download(String localFilePath, String remoteFilePath,FileTransferClient ftp)throws Exception {
ftp.downloadFile(localFilePath, remoteFilePath);
}
/**
* 按宽度高度压缩图片文件
* @param oldFile 要进行压缩的文件全路径
* @param newFile 新文件
* @param width 宽度
* @param height 高度
* @param quality 质量 0.0 -- 1.0 越小,压缩后图像效果越差,图片越小
* @return 返回压缩后的文件的全路径
*/
public static void zipWidthHeightImageFile(String oldFile,String newFile, int width, int height,
float quality,FileTransferClient ftp) throws Exception{
if (oldFile == null) {
return ;
}
/** 对服务器上的临时文件进行处理 */
String tempPath = "ftp://"+ftp.getUserName()
+":"+ftp.getPassword()
+"@"+ftp.getRemoteHost()
+":"+ftp.getRemotePort()
+ oldFile;
FileTransferInputStream ftis = FileTransferClient.downloadURLStream(tempPath);
Image srcFile = ImageIO.read(ftis);
/** 宽,高设定 */
BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);
/** 压缩之后存放位置 */
FileTransferOutputStream ftos = null;
try{
ftos = ftp.uploadStream(newFile);
}catch(Exception e){
e.printStackTrace();
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(ftos);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
/** 压缩质量 */
jep.setQuality(quality, true);
encoder.encode(tag, jep);
ftis.close();
ftos.flush();
ftos.close();
}
/**
* 按宽度高度压缩图片文件
* @param oldFile 要进行压缩的文件全路径
* @param newFile 新文件
* @param width 宽度
* @param height 高度
* @param quality 质量 0.0 -- 1.0 越小,压缩后图像效果越差,图片越小
* @return 返回压缩后的文件的全路径
*/
public static void zipWidthHeightImageFile(String[] oldFiles,String[] newFiles, int width, int height,
float quality,FileTransferClient ftp) throws Exception{
String tempPath = "ftp://"+ftp.getUserName()
+":"+ftp.getPassword()
+"@"+ftp.getRemoteHost()
+":"+ftp.getRemotePort()
+ "/";
FileTransferInputStream ftis = null;
FileTransferOutputStream ftos = null;
Image srcFile = null;
BufferedImage tag = null;
JPEGImageEncoder encoder = null;
JPEGEncodeParam jep = null;
for (int i=0;i<oldFiles.length;i++) {
ftis = FileTransferClient.downloadURLStream(tempPath+oldFiles[i]);
srcFile = ImageIO.read(ftis);
/** 宽,高设定 */
tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);
/** 压缩之后存放位置 */
ftos = ftp.uploadStream(newFiles[i]);
encoder = JPEGCodec.createJPEGEncoder(ftos);
jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
/** 压缩质量 */
jep.setQuality(quality, true);
encoder.encode(tag, jep);
ftis.close();
ftos.flush();
ftos.close();
}
}
/**
* 删除文件或文件夹
* @param remotePath 远程文件或文件夹路径
* @param type 0:文件 其他:文件夹
*/
public static void delete(String remotePath,int type,FileTransferClient ftp) throws Exception{
if(remotePath!=null && "".equals(remotePath)){
if(type==0){
try{
ftp.deleteFile(remotePath);
}catch (Exception e) {
e.printStackTrace();
}
}else{
try{
ftp.deleteDirectory(remotePath);
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* 删除文件或文件夹
* @param remotePath 远程文件或文件夹路径
* @param type 0:文件 其他:文件夹
*/
public static void delete(String[] remotePaths,int type,FileTransferClient ftp) throws Exception{
if(type==0){
for (String path : remotePaths) {
if(path!=null && !"".equals(path)){
try{
ftp.deleteFile(path);
}catch (Exception e) {
e.printStackTrace();
}
}
}
}else{
for (String path : remotePaths) {
if(path!=null && "".equals(path)){
try{
ftp.deleteFile(path);
}catch (Exception e) {
ftp.deleteDirectory(path);
}
}
}
}
}
/**
* 创建文件夹
* @param path 存放的文件夹路径 /车型/车号/类型拼音/年/月/日/
*/
private static void createDirectory(FileTransferClient ftpClient,
String folderPath) throws Exception {
if (ftpClient.directoryList(folderPath).length==0) {
String[] fileNames = folderPath.split("/");
String temp = "";
for (int i = 1; i < fileNames.length; i++) {
temp = temp+"/"+fileNames[i];
if (ftpClient.directoryList(temp).length==0) {
ftpClient.createDirectory(temp+"/");
} else {
continue;
}
}
}
}
/**
* 获取图片的名字
* @param localFilePath 上传图片路径 请以"/"结尾
* @return 返回Map imgurl 原图 preimgurl 压缩图
*/
public static Map<String, String[]> getImagePath(String[] localFilePath,String folderPath){
Map<String, String[]> urlMap = new HashMap<String, String[]>();
String[] imgurl = null;
String[] preimgurl = null;
if(localFilePath!=null && localFilePath.length!=0){
int size = localFilePath.length;
imgurl = new String[size];
preimgurl = new String[size];
String temp;
for (int i = 0; i < size; i++) {
temp = System.currentTimeMillis()+"_"+ (int)(Math.random()*1000000);;
imgurl[i] = folderPath + temp + getFileSuffix(localFilePath[i]);
preimgurl[i] = folderPath + temp + "s" + getFileSuffix(localFilePath[i]);
}
}
urlMap.put("imgurl", imgurl);
urlMap.put("preimgurl", preimgurl);
return urlMap;
}
/**
* 获取文件名
*
* @return
*/
public static String getFileSuffix(String filePath) {
String suffix = "";
if (filePath != null && !"".equals(filePath)) {
suffix = filePath.substring(filePath.lastIndexOf(".")).toLowerCase();
}
return suffix;
}
/**
* 获取图片的拍摄时间
* @param args
*/
public static String[] getImageCreateTime(String[] imgPaths,FileTransferClient ftp)throws Exception{
String[] createTimes = null;
if(imgPaths!=null && imgPaths.length!=0){
createTimes = new String[imgPaths.length];
Metadata metadata = null;
ExifSubIFDDirectory directory = null;
byte[] buf = null;
for (int i=0;i<imgPaths.length;i++) {
buf = ftp.downloadByteArray(imgPaths[i]);
metadata = JpegMetadataReader.readMetadata(new BufferedInputStream(new ByteArrayInputStream(buf)));
directory = metadata.getDirectory(ExifSubIFDDirectory.class);
try{
createTimes[i] = directory.getDescription(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL);
}catch (Exception e) {
createTimes[i] = null;
}
}
}
return createTimes;
}
public static void main(String[] args) {
try {
FileTransferClient ftpClient = FTPUnit.getFileTransferClient("192.168.1.254",21,"ftp","123456");
FileInputStream fis = new FileInputStream(new File("D:\\ip.log"));
FileTransferOutputStream ftos = ftpClient.uploadStream("/test/ip.log");
byte[] bytes = new byte[1024];
int c;
while ((c = fis.read(bytes)) != -1) {
ftos.write(bytes, 0, c);
}
ftos.flush();
ftos.close();
fis.close();
ftpClient.disconnect();
//String[] str=getImageCreateTime(new String[]{"/DF4/3838/xunjian/2013/5/20/1369045589718_150510.jpg"},ftpClient);
} catch (Exception e) {
e.printStackTrace();
}
}
}