下载ftp文件

package test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

public class Ftp {

/** 
* Description: 从FTP服务器下载文件 
* @param ip FTP服务器的ip地址 
* @param port FTP服务器端口,默认为:21 
* @param username FTP登录账号 
* @param password FTP登录密码 
* @param remotePath FTP服务器上的相对路径 
* @param fileName 要下载的文件名 
* @param localPath 下载后保存到本地的路径 
* @return 
*/ 
public static boolean downFile(String ip, int port,String username, String password, String remotePath,String fileName,String localPath) {   
     boolean success = false;   
     FTPClient ftp = new FTPClient();   
     try {   
         int reply;   
         ftp.connect(ip, port);
         //下面三行代码必须要,而且不能改变编码格式,否则不能正确下载中文文件
         ftp.setControlEncoding("GBK");
         FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);   
         conf.setServerLanguageCode("zh"); 
        
         //如果采用默认端口,可以使用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();   
         
         for(int i = 0; i < fs.length; i++){ 
         FTPFile ff = fs[i];
             if(ff.getName().equals(fileName)){   
             
                 File localFile = new File(localPath+File.separator+ff.getName());   
//                    
                 OutputStream is = new FileOutputStream(localFile);   
                 
                 //注意此处retrieveFile的第一个参数由GBK转为ISO-8859-1编码。否则下载后的文件内容为空。
                 //原因可能是由于aix系统默认的编码为ISO-8859-1
                 ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO-8859-1"), is);   
                 is.close();   
             }   
         }   
            
         ftp.logout();   
         success = true;   
     } catch (IOException e) {   
         e.printStackTrace();   
     } finally {   
         if (ftp.isConnected()) {   
             try {   
                 ftp.disconnect();   
             } catch (IOException ioe) {   
             }   
         }   
     }   
     return success;   
}

public static void main(String[] args) {
   // TODO Auto-generated method stub
  Ftp.downFile("10.32.166.144", 21, "test", "test", "/flashfxp", "激活码.txt", "C:");
     
}

}

2)将ftp资源以文件流的方式打开,由用户决定保存在本地何处,程序运行后可以从IE跳出框中打开或者保存的Action代码,利用Struts1写的:

/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.mocha.test;

import java.io.IOException;

import java.io.OutputStream;

import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class DownloadAction extends Action{

    /** *//** 
     * Method execute
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     * @throws IOException 
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) throws IOException{

OutputStream os=null;

            try {
                
                os = response.getOutputStream();
                
                response.reset();       

downFile("10.32.166.144", 21, "test", "test", "/flashfxp", "激活码.txt",os,response);
               
            } catch (IOException e){
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                try{
                    os.close();
                    
                } catch (IOException e){
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
            }
        return null;

    }

/** 
* Description: 从FTP服务器下载文件 
* @param ip FTP服务器ip地址
* @param port FTP服务器端口,默认为21 
* @param username FTP登录账号 
* @param password FTP登录密码 
* @param remotePath 附件在FTP服务器上的绝对路径 
* @param fileName 要下载的文件名 
* @param outputStream 输出流
* @param response 
* @return 
*/ 
public static boolean downFile(String ip, int port,String username, String password, String remotePath
    ,String fileName,OutputStream outputStream,HttpServletResponse response) {   
     boolean success = false;   
     FTPClient ftp = new FTPClient();   
     try {   
         int reply;   
         ftp.connect(ip, port);
         //下面三行代码必须要,而且不能改变编码格式
         ftp.setControlEncoding("GBK");
         FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);   
         conf.setServerLanguageCode("zh"); 
        
         //如果采用默认端口,可以使用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();   
         
         for(int i = 0; i < fs.length; i++){ 
         FTPFile ff = fs[i];
             if(ff.getName().equals(fileName)){
             
             String filename = fileName;
                 //这个就就是弹出下载对话框的关键代码
                 response.setHeader("Content-disposition",
                                    "attachment;filename=" +
                                    URLEncoder.encode(filename, "utf-8"));
                 //将文件保存到输出流outputStream中
                 ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),"ISO-8859-1"), outputStream);
                 outputStream.flush();
                 outputStream.close();
             }   
         }   
            
         ftp.logout();   
         success = true;   
     } catch (IOException e) {   
         e.printStackTrace();   
     } finally {   
         if (ftp.isConnected()) {   
             try {   
                 ftp.disconnect();   
             } catch (IOException ioe) {   
             }   
         }   
     }   
     return success;   
}
}

差点忘了利用ftpclient要用到的jar包了,呵呵,就这两个了:commons-net-1.4.1.jar、jakarta-oro-2.0.8.jar

package com.kwantler.YN_EW.service.impl; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class FilePhoto { /** * 从网络Url中下载文件 * * @param urlStr * @param fileName * @param savePath * @throws IOException */ public static void downLoadByUrl(String urlStr, String fileName, String savePath) throws IOException { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置超时间为3秒 conn.setConnectTimeout(5 * 1000); // 防止屏蔽程序抓取而返回403错误 conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); // 得到输入流 InputStream inputStream = conn.getInputStream(); // 获取自己数组 byte[] getData = readInputStream(inputStream); // 文件保存位置 File saveDir = new File(savePath); if (!saveDir.exists()) { saveDir.mkdir(); } File file = new File(saveDir + File.separator + fileName); FileOutputStream fos = new FileOutputStream(file); fos.write(getData); if (fos != null) { fos.close(); } if (inputStream != null) { inputStream.close(); } System.out.println("info:" + url + " download success"); } /** * 从输入流中获取字节数组 * * @param inputStream * @return * @throws IOException */ public static byte[] readInputStream(InputStream inputStream) throws IOException { byte[] buffer = new byte[1024]; int len = 0; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while ((len = inputStream.read(buffer)) != -1) { bos.write(buffer, 0, len); } bos.close(); return bos.toByteArray(); } public static void main(String[] args) { try { downLoadByUrl( "https://www.mybiosource.com/images/tds/protocol_samples/MBS700_Antibody_Set_Sandwich_ELISA_Protocol.pdf", "ELISA.pdf", "E:/upload/protocol"); } catch (Exception e) { // TODO: handle exception } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值