这是当时用来上传文件服务器的方法,仅供参考
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 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){
new Thread(
new Runnable(){
public void run(){
if(imgStr !=
null && imgStr.length() >
0){
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) {
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.login(username, password);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
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();
}
}
转载请注明原文地址: https://ju.6miu.com/read-11283.html