这是当时用来上传文件服务器的方法,仅供参考
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
import sun.misc.BASE64Decoder;
public class UploadFileToFTP {
public static void main(String[] args) {
String imgStr="二进制字符串";
upLoadFromProduction(imgStr,"url", 端口, "username", "password", "uploads/"+DateFormateUtil.getStringDateShort()+"/", "12345.png");
}
// static ExecutorService fixedThreadPool = Executors.newFixedThreadPool(8);
static Logger logger = Logger.getLogger(UploadFileToFTP.class.getName ()) ;
/**
* 将接收的字符串转换成二进制流并上传FTP服务器
* @param imgStr 二进制流转换的字符串
* @param imgSavePath 图片的保存路径
* @param imgSaveName 图片的保存名称
* @param ip ftp服务器IP地址
* @param port 服务器端口
* @param username 登录名
* @param password 登录密码
* @return
* 1:保存正常
* 0:保存失败
*/
public synchronized static void upLoadFromProduction(final String imgStr,
final String ip,final int port,final String username,final String password,final String imgSavePath,final String imgSaveName){
// fixedThreadPool.execute(new Runnable(){
new Thread(new Runnable(){
public void run(){
if(imgStr != null && imgStr.length() > 0){
// 将字符串转换成二进制,用于显示图片
// 将上面生成的图片格式字符串 imgStr,还原成图片显示
// byte[] imgByte = hex2byte( imgStr );
byte[] imgByte;
try {
imgByte = new BASE64Decoder().decodeBuffer(imgStr);
InputStream in = new ByteArrayInputStream(imgByte);
if(!uploadFile(ip, port, username, password, imgSavePath, imgSaveName, in)){//上传图片
logger.info("文件路径:"+imgSavePath);
logger.info("上传失败:"+imgSaveName);
}else{
logger.info("文件路径:"+imgSavePath);
logger.info("上传成功:"+imgSaveName);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
/**
* Description: 向FTP服务器上传文件
* @Version 1.0
* @param url FTP服务器hostname
* @param port FTP服务器端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param path FTP服务器保存目录
* @param filename 上传到FTP服务器上的文件名
* @param input 输入流
* @return 成功返回true,否则返回false *
*/
public static boolean uploadFile(String url,// FTP服务器hostname
int port,// FTP服务器端口
String username, // FTP登录账号
String password, // FTP登录密码
String path, // FTP服务器保存目录
String filename, // 上传到FTP服务器上的文件名
InputStream input // 输入流
){
boolean success = false;
FTPClient ftp = new FTPClient();
ftp.setControlEncoding("GBK");
try {
int reply;
ftp.setConnectTimeout(10000);
ftp.connect(url, port);// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
//设置PassiveMode传输 设为被动
ftp.enterLocalPassiveMode();
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
if(path!=null&&!path.equals("")){
String[] paths = path.split("/");
for(int i=0;i<paths.length;i++){
if(!ftp.changeWorkingDirectory(paths[i])){
ftp.makeDirectory(paths[i]);
ftp.changeWorkingDirectory(paths[i]);
}
}
}else{
ftp.makeDirectory(path);
ftp.changeWorkingDirectory(path);
}
if(!ftp.storeFile(filename, input)){
logger.info("无读写权限:"+filename);
return success;
}
input.close();
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
return success;
}
/**
* 字符串转二进制
* @param str 要转换的字符串
* @return 转换后的二进制数组
*/
public static byte[] hex2byte(String str) { // 字符串转二进制
if (str == null)
return null;
str = str.trim();
int len = str.length();
if (len == 0 || len % 2 != 0)
return null;
byte[] b = new byte[len / 2];
try {
for (int i = 0; i < str.length(); i += 2) {
b[i / 2] = (byte) Integer
.decode("0X" + str.substring(i, i + 2)).intValue();
}
return b;
} catch (Exception e) {
return null;
}
}
/**
*这个方法不是很好,最好用base64加密转换
* 二进制转字符串
* @param b
* @return
*/
public static String byte2hex(byte[] b) // 二进制转字符串
{
StringBuffer sb = new StringBuffer();
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = Integer.toHexString(b[n] & 0XFF);
if (stmp.length() == 1) {
sb.append("0" + stmp);
} else {
sb.append(stmp);
}
}
return sb.toString();
}
}
ftp上传,加入线程
最新推荐文章于 2021-06-26 20:49:07 发布