1.前端代码

使用超链接到Struts的Action或Servlet

<a target="_blank" href="ftpFileAction!downloadFile.action?transUrl=ftp://10.0.2.1/tazi/a.xml">请点击下载</a>

2.后台代码 Action或Servlet

String s1=transUrl; // transUrl是前台接受的参数,get接受的参数tomcat一律使用iso-8859-1编码

transUrl=new String(transUrl.getBytes("ISO-8859-1"),"utf-8");//程序中要使用的文件名,必须转换为gbk编码
s1=s1.substring(6);
s1=s1.substring(s1.indexOf("/"));
String filename=s1.substring(s1.lastIndexOf("/")+1);
String filepath=s1.substring(0,s1.lastIndexOf("/"));


response.setCharacterEncoding("gbk");
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment;filename=\"" + new String(filename.getBytes("gbk"),"ISO-8859-1")+ "\"");//response文件头中定义的filename包含的中文必须是原始的ISO-8859-1编码。


boolean suc=false;
suc=downFileStream("10.0.2.1", 21,"myUser","myPwd",
filepath, filename, os);//downFileStream是一个下载ftp文件到文件流的方法
if(!suc){
response.reset();
response.setCharacterEncoding("gbk");
PrintWriter writer=new PrintWriter(os);
writer.write("指定的文件不存在!");
writer.close();
}else{
os.close();
};

 

3.ftp文件下载处理

注意这里引入的包是

org.apache.commons.net.ftp.*

  (1).下载到本地

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply; public static boolean downFile(String url, // FTP服务器hostname
int port,// FTP服务器端口
String username, // FTP登录账号
String password, // FTP登录密码
String remotePath,// FTP服务器上的相对路径
String fileName,// 要下载的文件名
String localPath// 下载后保存到本地的路径
) {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(url, port);
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles();
boolean ftpFileExist=false;
for (FTPFile ff : fs) {
if (ff.getName().equals(fileName)) {
ftpFileExist=true;
File dir = new File(localPath);
if(!dir.exists()){
dir.mkdirs();
}
File localFile = new File(localPath + File.separator + ff.getName());
OutputStream is = new FileOutputStream(localFile,true);
ftp.setBufferSize(1024);
if(ftp.setFileType(FTP.BINARY_FILE_TYPE)){
ftp.retrieveFile(ff.getName(), is);
is.close();
}
}
}
ftp.logout();
if(ftpFileExist){
success = true;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}

  (2).下载到文件输出流 OutputStream

public static boolean downFileStream(String url, // FTP服务器hostname
int port,// FTP服务器端口
String username, // FTP登录账号
String password, // FTP登录密码
String remotePath,// FTP服务器上的相对路径
String fileName,// 要下载的文件名
OutputStream os
) {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(url, port);
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return false;
}
ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles();
boolean ftpFileExist=false;
for (FTPFile ff : fs) {
String ffName=new String(ff.getName().getBytes("ISO-8859-1"),"gbk");
if (ffName.equals(fileName)) {
ftpFileExist=true;
ftp.setBufferSize(1024);
if(ftp.setFileType(FTP.BINARY_FILE_TYPE)){
ftp.retrieveFile(ff.getName(), os);
}
}
}
ftp.logout();
if(ftpFileExist){
success = true;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}

4.ftp文件上传

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();
try {
int reply;
ftp.connect(url, port);// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(path);
ftp.storeFile(filename, input); input.close();
ftp.logout();
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}

上传时中文名处理,要转换为

ISO-8859-1编码
public static void main(String[] args) throws Exception{
FtpUtil f= new FtpUtil();
File file=new File("D:/测试.xml");
InputStream isInputStream=new FileInputStream(file);
String filename=new String("中文.xml".getBytes("gbk"),"ISO-8859-1");
f.uploadFile("10.7.0.15", 21, "dd", "dd", "/tazi",
filename, isInputStream); }

java/struts/Servlet文件下载与ftp文件上传下载的更多相关文章

  1. Java基础——Servlet(八)文件上传下载

    一.简单的文件上传常见的组件Smartupload , Apache 的 commons FileUploadSmartupload上传的步骤: 1.初始化上传上下文 2.准备上传 3.保存文件 &l ...

  2. Python 基于Python实现Ftp文件上传,下载

    基于Python实现Ftp文件上传,下载   by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...

  3. 【FTP】FTP文件上传下载-支持断点续传

    Jar包:apache的commons-net包: 支持断点续传 支持进度监控(有时出不来,搞不清原因) 相关知识点 编码格式: UTF-8等; 文件类型: 包括[BINARY_FILE_TYPE(常 ...

  4. java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题

    //文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,String ...

  5. python 实现远端ftp文件上传下载

    python 实现ftp上传下载 * 脚本需要传入两个参数,参数1为需要从远端ftp站点下载文件名称,参数2为已知需要下载的文件md5值,文件下载完成后会自动进行md5值校验 * 运行示例 [root ...

  6. 4.1 - FTP文件上传下载

    题目:开发一个支持多用户同时在线的FTP程序要求:1.用户加密认证2.允许同时多用户登录3.每个用户有自己的家目录,且只能访问自己的家目录4.对用户进行磁盘配额,每个用户的可用空间不同5.允许用户在f ...

  7. ftp文件上传下载命令

    介绍:从本地以用户wasqry登录的机器1*.1**.21.67上通过ftp远程登录到ftp服务器上,登录用户名是lte****,以下为使用该连接做的实验.  查看远程ftp服务器上用户lte**** ...

  8. Java 利用Apache Commons Net 实现 FTP文件上传下载

    package woxingwosu; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...

  9. FTP文件上传下载

    使用Apache Commons Net来实现FTP服务器文件的上传 与 下载 maven配置Jar <!-- https://mvnrepository.com/artifact/common ...

随机推荐

  1. openstack configure

    <一,nova.conf配置文件配置 hypervisors compute_driver = 值> 1,kvm/qemu Hypervisor OpenStack nova comput ...

  2. live555 源代码简单分析1:主程序

    live555是使用十分广泛的开源流媒体服务器,之前也看过其他人写的live555的学习笔记,在这里自己简单总结下. live555源代码有以下几个明显的特点: 1.头文件是.hh后缀的,但没觉得和. ...

  3. 二十六、Jcreator使用初步

    摘自http://blog.csdn.net/liujun13579/article/details/7751464 二十六.Jcreator使用初步 Jcreator是一个小巧灵活的Java开发工具 ...

  4. 文件系统、mkdir、touch、nano、cp笔记

    文件系统:rootfs: 根文件系统 FHS:Linux发行版目录层级遵循协议 /boot: 系统启动相关的文件,如内核.initrd,以及grub(bootloader)引导加载器/dev: 设备文 ...

  5. 企业OA面临的问题,以及解决问题的推荐

          现在的企业不管大小都趋于软件话,而办公用的OA软件更是成为了企业中不可获取的一环,一个好的软件能让企业发展的更加顺利,而一个不合适的软件可能让公司哀声怨道反而起了反作用!       OA ...

  6. AC大牛经典语录

    超经典:     1. 为了世界的和平,为了女生的安全,我拼命做题,做题,做题! 2. A ac a day, keeps the doctor away! 3. from good to great ...

  7. vmware tools 安装

    转到虚拟机 > 安装 VMware Tools(或 VM > 安装 VMware Tools).注意:如果您运行的是轻量版的 Fusion.不带 VMware Tools 的 Workst ...

  8. Linux Tomcat7.0安装配置实践总结

    一,安装JDk 先下载jdk,链接http://www.oracle.com/technetwork/java/javase/downloads/index.html,选择相对应平台的JDK.由于笔者 ...

  9. Js触发ASP.NET Validation控件的验证, 同时获取前台验证结果(不包括CustomValidator)

    function CallValidate(group) { if (typeof (Page_ClientValidate) == "function") { Page_Bloc ...

  10. VS2003,安装程序检测到另一个程序…

    昨天在安装Visual Studio .Net 2003时,出现一个对话框   "安装程序检测到另一个程序要求计算机重新启动.必须重新启动计算机后才能安装visual studio.net系 ...