javaweb 怎么样将本地文件传输到远程服务器
可以通过JDK自带的API实现,如下代码:
package comcloudpowerutil;
import javaioFile;
import javaioFileInputStream;
import javaioFileOutputStream;
import javaioIOException;
import sunnetTelnetInputStream;
import sunnetTelnetOutputStream;
import sunnetftpFtpClient;
/
Java自带的API对FTP的操作
@Title:Ftpjava
/
public class Ftp {
/
本地文件名
/
private String localfilename;
/
远程文件名
/
private String remotefilename;
/
FTP客户端
/
private FtpClient ftpClient;
/
服务器连接
@param ip 服务器IP
@param port 服务器端口
@param user 用户名
@param password 密码
@param path 服务器路径
@date 2012-7-11
/
public void connectServer(String ip, int port, String user,
String password, String path) {
try {
/ 连接服务器的两种方法/
//第一种方法
// ftpClient = new FtpClient();
// ftpClientopenServer(ip, port);
//第二种方法
ftpClient = new FtpClient(ip);
ftpClientlogin(user, password);
// 设置成2进制传输
ftpClientbinary();
Systemoutprintln("login success!");
if (pathlength() != 0){
//把远程系统上的目录切换到参数path所指定的目录
ftpClientcd(path);
}
ftpClientbinary();
} catch (IOException ex) {
exprintStackTrace();
throw new RuntimeException(ex);
}
}
public void closeConnect() {
try {
ftpClientcloseServer();
Systemoutprintln("disconnect success");
} catch (IOException ex) {
Systemoutprintln("not disconnect");
exprintStackTrace();
throw new RuntimeException(ex);
}
}
public void upload(String localFile, String remoteFile) {
thislocalfilename = localFile;
thisremotefilename = remoteFile;
TelnetOutputStream os = null;
FileInputStream is = null;
try {
//将远程文件加入输出流中
os = ftpClientput(thisremotefilename);
//获取本地文件的输入流
File file_in = new File(thislocalfilename);
is = new FileInputStream(file_in);
//创建一个缓冲区
byte[] bytes = new byte[1024];
int c;
while ((c = isread(bytes)) != -1) {
oswrite(bytes, 0, c);
}
Systemoutprintln("upload success");
} catch (IOException ex) {
Systemoutprintln("not upload");
exprintStackTrace();
throw new RuntimeException(ex);
} finally{
try {
if(is != null){
isclose();
}
} catch (IOException e) {
eprintStackTrace();
} finally {
try {
if(os != null){
osclose();
}
} catch (IOException e) {
eprintStackTrace();
}
}
}
}
public void download(String remoteFile, String localFile) {
TelnetInputStream is = null;
FileOutputStream os = null;
try {
//获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。
is = ftpClientget(remoteFile);
File file_in = new File(localFile);
os = new FileOutputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = isread(bytes)) != -1) {
oswrite(bytes, 0, c);
}
Systemoutprintln("download success");
} catch (IOException ex) {
Systemoutprintln("not download");
exprintStackTrace();
throw new RuntimeException(ex);
} finally{
try {
if(is != null){
isclose();
}
} catch (IOException e) {
eprintStackTrace();
} finally {
try {
if(os != null){
osclose();
}
} catch (IOException e) {
eprintStackTrace();
}
}
}
}
public static void main(String agrs[]) {
String filepath[] = { "/temp/aatxt", "/temp/registlog"};
String localfilepath[] = { "C:\\tmp\\1txt","C:\\tmp\\2log"};
Ftp fu = new Ftp();
/
使用默认的端口号、用户名、密码以及根目录连接FTP服务器
/
fuconnectServer("127001", 22, "anonymous", "IEUser@", "/temp");
//下载
for (int i = 0; i < filepathlength; i++) {
fudownload(filepath[i], localfilepath[i]);
}
String localfile = "E:\\号码txt";
String remotefile = "/temp/哈哈txt";
//上传
fuupload(localfile, remotefile);
fucloseConnect();
}
}
有两种可能:
一、你的程序显示成功,但是只是个输出显示成功的语句,而实际上并没有上传文件;
二、文件确实上传成功了。但是你找的文件夹的路径不对。这种问题你可以这样验证:在tomcat所在的路径下,用电脑的文件搜索搜一下你上传的文件名,看能不能搜到。能搜到就说明是你找错位置了。搜不到就是真的没有上传成功。
String realpath = ServletActionContextgetServletContext()getRealPath("/upload") ;//获取服务器路径
String[] targetFileName = uploadFileName;
for (int i = 0; i < uploadlength; i++) {
File target = new File(realpath, targetFileName[i]);
FileUtilscopyFile(upload[i], target);
//这是一个文件复制类copyFile()里面就是IO操作,如果你不用这个类也可以自己写一个IO复制文件的类
}
其中private File[] upload;// 实际上传文件
private String[] uploadContentType; // 文件的内容类型
private String[] uploadFileName; // 上传文件名
这三个参数必须这样命名,因为文件上传控件默认是封装了这3个参数的,且在action里面他们应有get,set方法
0条评论