package cmcc.jx.ict.xsgj.upload.ftp.action;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.List;
import java.util.PropertyResourceBundle;
import sun.net.ftp.FtpClient;
import sun.net.ftp.FtpProtocolException;
import com.opensymphony.xwork2.ActionSupport;
/**
* @author zyt
* @version : 2017年2月22日
*/
public class UploadFile extends ActionSupport {
private List<File> file1; //具体上传文件的 引用 , 指向临时目录中的临时文件
private List<String> file1FileName ; // 上传文件的名字
private List<String> file1ContentType ; //上传文件的类型
private InputStream info; //返回的数据
private FtpClient ftpClient;
public String upload() throws IOException{
try {
//获取properties文件里配置的数据
PropertyResourceBundle res = (PropertyResourceBundle) PropertyResourceBundle.getBundle("ftpUpload");
String ip = res.getString("ftpUpload.ip");
Integer port = Integer.valueOf(res.getString("ftpUpload.port"));
String user = res.getString("ftpUpload.user");
String password = res.getString("ftpUpload.password");
// 连接ftp服务器
this.connectServer(ip,port, user, password, "");
// 上传文件;并返回上传文件的信息
if (file1FileName == null) {
this.info = new ByteArrayInputStream("null".getBytes());
return SUCCESS;
}
for(int i = 0 ; i < file1.size() ; i++ ) {
upload(file1.get(i),file1FileName.get(i));
}
} catch (Exception e) {
System.out.println(e.toString());
this.info = new ByteArrayInputStream("false".getBytes());
return SUCCESS;
} finally {
if (ftpClient != null) {
ftpClient.close();
}
}
this.info = new ByteArrayInputStream("true".getBytes());
return SUCCESS;
}
/*
* 连接ftp服务器
* ip:FTP服务器的IP地址
* port:端口号
* user:登录FTP服务器的用户名
* password:登录FTP服务器的用户名的口令
* path:FTP服务器上的路径
*/
public void connectServer(String ip, int port, String user,
String password, String path) throws FtpProtocolException, IOException {
ftpClient = FtpClient.create();
SocketAddress addr = new InetSocketAddress(ip,port);
ftpClient.connect(addr);
ftpClient.login(user, password.toCharArray());
if (path.length() != 0){
//把远程系统上的目录切换到参数path所指定的目录
ftpClient.changeDirectory(path);
}
}
/**
* file_in 本地文件
* fileName 本地文件名
*/
// 上传文件;并返回上传文件的信息
private String upload(File file_in,String fileName) throws Exception {
OutputStream os = null;
FileInputStream is = null;
try {
// 将远程文件加入输出流中
os = ftpClient.putFileStream(fileName);
if (file_in.length() == 0) {
return "上传文件为空!";
}
is = new FileInputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
} finally {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
}
return "上传文件成功!";
}
public InputStream getInfo() {
return info;
}
public void setInfo(InputStream info) {
this.info = info;
}
public List<File> getFile1() {
return file1;
}
public void setFile1(List<File> file1) {
this.file1 = file1;
}
public List<String> getFile1FileName() {
return file1FileName;
}
public void setFile1FileName(List<String> file1FileName) {
this.file1FileName = file1FileName;
}
public List<String> getFile1ContentType() {
return file1ContentType;
}
public void setFile1ContentType(List<String> file1ContentType) {
this.file1ContentType = file1ContentType;
}
}
<package name="upload-ftp" extends="struts-default">
<action name="ftpUpload" class="uploadFile" method="upload">
<result type="stream">
<param name="contentType">text/html</param>
<param name="inputName">info</param>
</result>
</action>
</package>
<script src="./js/jquery-1.7.2.min.js"></script>
<script src="./js/jquery-form3.5.js"></script>
<script type="text/javascript">
$(document).ready(function (){
$("#sm").click(function (){
$("#form1").ajaxSubmit({
type: "post",
url:"ftpUpload.action",
success:function(data){
alert(data);
}
});
});
});
</script>
<form id="form1" action="" method="post" enctype="multipart/form-data">
<input name="file1" type="file">
<input id="sm" type="button" value="上传">
</form>
//FTP服务器下载地址
http://pan.baidu.com/s/1miwOZ48