Android 는 ftp 방식 으로 파일 업로드 와 다운로드 기능 을 구현 합 니 다.

최근 에 업무 상 플랫폼 OTA 온라인 업그레이드 프로젝트 를 계속 유지 하고 있 습 니 다.그 중에서 이 업그레이드 파일 은 주로 ftp 서버 에 저 장 된 다음 에 클 라 이언 트 는 ftp 프로 토 콜 방식 으로 로 컬 안 드 로 이 드 컴퓨터 에 다운로드 하여 시스템 업그레이드 작업 을 합 니 다.그러면 오늘 ftp 구현 파일 업로드 와 다운로드 에 대해 사용 정 리 를 진행 할 것 입 니 다.ftp 에 관 한 이론 지식 이 도 우 여러분 에 대해 잘 모 르 시 면 이동 하 십시오HTTP 와 FTP 의 차이 점 에 대한 이론 지식구체 적 인 이해 나 관련 자 료 를 찾 아 보 세 요.그럼 개인 사업 프로젝트 인 OTA 업그레이드 효과 도 를 살 펴 보 자.다음 과 같다.
这里写图片描述
다음은 구체 적 인 인터페이스 실현:
这里写图片描述
그러면 ftp 와 관련 된 조작 은 ota.ftp 라 는 가방 에 봉 인 됐 습 니 다.어린이 신발 은 예제 코드 를 다운로드 하여 천천히 연구 할 수 있 습 니 다.그리고 이 건 ftp 서 비 스 를 이용 하면 저희 클 린 엔 드 에서 프로젝트 프로젝트 를 다시 가 져 와 야 합 니 다.ftp4j-1.7.2.jar 패키지.
여기 서 사용 하 는 논리 분석 을 하 겠 습 니 다.먼저 저희 프로젝트 프로젝트 FtpApplication 에서 이 OtaService 를 시작 합 니 다.그 중에서 OtaService 는 하나의 서비스 로 실 행 됩 니 다.이 서비스 에서 ftp 관련 인 터 페 이 스 를 봉 인 된 Download.java 를 받 아 ftp 파일 작업 을 합 니 다.관건 적 인 코드 는 다음 과 같 습 니 다.

public void startDownload() {
 // TODO Auto-generated method stub
 mDownLoad.start();
 }

 public void stopDownload() {
 mDownLoad.stop();
 }

 public void cancel() {
 mDownLoad.cancel();
 }

 public String getOldDate() {
 return mDownLoad.getDatabaseOldDate();
 }

 public String getOldVersion() {
 return mDownLoad.getDatabaseOldVersion();
 }

 public void checkVer(String serverRoot) {
 // TODO Auto-generated method stub
 mDownLoad = DownLoad.getInstance();
 mDownLoad.setServeRoot(serverRoot);
 mDownLoad.setFtpInfo(mApp.mFtpInfo);
 mDownLoad.checkUpgrade();
 }
FTPToolkit.java

package com.asir.ota.ftp;

import it.sauronsoftware.ftp4j.FTPClient; 
import it.sauronsoftware.ftp4j.FTPFile;

import java.io.File;
import java.util.List;

import com.asir.ota.clinet.PathToolkit;
import com.asir.ota.ftp.DownLoad.MyFtpListener;

/**
 * FTP     
 * 
 */
public final class FTPToolkit {

 private FTPToolkit() {
 }

 /**
 *   FTP  
 * 
 * @param host
 *      IP
 * @param port
 *  ftp  
 * @param username
 *  ftp   
 * @param password
 *  ftp  
 * @return      
 * @throws Exception 
 */
 public static FTPClient makeFtpConnection(String host, int port,
  String username, String password) throws Exception {
 FTPClient client = new FTPClient();
 try {
  client.connect(host, port);
  if(username != null && password != null) {
  client.login(username, password);
  }
 } catch (Exception e) {
  throw new Exception(e);
 }
 return client;
 }
/**
 * FTP            ,          ,          
 * 
 * @param client
 *  FTP   
 * @param remoteFileName
 *  FTP  
 * @param localPath
 *             
 * @throws Exception 
 */
 public static void download(FTPClient client, String remoteFileName,
  String localPath, long startPoint, MyFtpListener listener) throws Exception {

 String localfilepath = localPath;
 int x = isExist(client, remoteFileName);
 File localFile = new File(localPath);
 if (localFile.isDirectory()) {
  if (!localFile.exists())
  localFile.mkdirs();
  localfilepath = PathToolkit.formatPath4File(localPath
   + File.separator + new File(remoteFileName).getName());
 }

 if (x == FTPFile.TYPE_FILE) {
  try {
  if (listener != null)
   client.download(remoteFileName, new File(localfilepath),
    startPoint, listener);
  else
   client.download(remoteFileName, new File(localfilepath), startPoint);
  } catch (Exception e) {
  throw new Exception(e);
  }
 } else {
  throw new Exception("the target " + remoteFileName + "not exist");
 }
 }
/**
 * FTP       FTP      
 * 
 * @param client
 *  FTP   
 * @param localfile
 *      
 * @param remoteFolderPath
 *  FTP    
 * @throws Exception 
 */
 public static void upload(FTPClient client, File localfile,
  String remoteFolderPath, MyFtpListener listener) throws Exception {
 remoteFolderPath = PathToolkit.formatPath4FTP(remoteFolderPath);
 try {
  client.changeDirectory(remoteFolderPath);
  if (!localfile.exists())
  throw new Exception("the upload FTP file"
   + localfile.getPath() + "not exist!");
  if (!localfile.isFile())
  throw new Exception("the upload FTP file"
   + localfile.getPath() + "is a folder!");
  if (listener != null)
  client.upload(localfile, listener);
  else
  client.upload(localfile);
  client.changeDirectory("/");
 } catch (Exception e) {
  throw new Exception(e);
 }
 }

/**
 * FTP       FTP      
 * 
 * @param client
 *  FTP   
 * @param localfilepath
 *        
 * @param remoteFolderPath
 *  FTP    
 * @throws Exception 
 */
 public static void upload(FTPClient client, String localfilepath,
  String remoteFolderPath, MyFtpListener listener) throws Exception {
 File localfile = new File(localfilepath);
 upload(client, localfile, remoteFolderPath, listener);
 }

/**
 *          FTP     
 * 
 * @param client
 *  FTP   
 * @param localFilePaths
 *          
 * @param remoteFolderPath
 *  FTP    
 * @throws Exception 
 */
 public static void uploadListPath(FTPClient client,
  List<String> localFilePaths, String remoteFolderPath, MyFtpListener listener) throws Exception {
 remoteFolderPath = PathToolkit.formatPath4FTP(remoteFolderPath);
 try {
  client.changeDirectory(remoteFolderPath);
  for (String path : localFilePaths) {
  File file = new File(path);
  if (!file.exists())
   throw new Exception("the upload FTP file" + path + "not exist!");
  if (!file.isFile())
   throw new Exception("the upload FTP file" + path
    + "is a folder!");
  if (listener != null)
   client.upload(file, listener);
  else
   client.upload(file);
  }
  client.changeDirectory("/");
 } catch (Exception e) {
  throw new Exception(e);
 }
 }
/**
 *          FTP     
 * 
 * @param client
 *  FTP   
 * @param localFiles
 *        
 * @param remoteFolderPath
 *  FTP    
 * @throws Exception 
 */
 public static void uploadListFile(FTPClient client, List<File> localFiles,
  String remoteFolderPath, MyFtpListener listener) throws Exception {
 try {
  client.changeDirectory(remoteFolderPath);
  remoteFolderPath = PathToolkit.formatPath4FTP(remoteFolderPath);
  for (File file : localFiles) {
  if (!file.exists())
   throw new Exception("the upload FTP file" + file.getPath()
    + "not exist!");
  if (!file.isFile())
   throw new Exception("the upload FTP file" + file.getPath()
    + "is a folder!");
  if (listener != null)
   client.upload(file, listener);
  else
   client.upload(file);
  }
  client.changeDirectory("/");
 } catch (Exception e) {
  throw new Exception(e);
 }
 }
/**
 *     FTP      ,        (FTPFile.TYPE_DIRECTORY=1、FTPFile.TYPE_FILE=0、
 * FTPFile.TYPE_LINK=2)        ,     -1
 * 
 * @param client
 *  FTP   
 * @param remotePath
 *  FTP        
 * @return          (  0,   1,  2),      -1
 */
 public static int isExist(FTPClient client, String remotePath) {
 remotePath = PathToolkit.formatPath4FTP(remotePath);
 FTPFile[] list = null;
 try {
  list = client.list(remotePath);
 } catch (Exception e) {
  return -1;
 }
 if (list.length > 1)
  return FTPFile.TYPE_DIRECTORY;
 else if (list.length == 1) {
  FTPFile f = list[0];
  if (f.getType() == FTPFile.TYPE_DIRECTORY)
  return FTPFile.TYPE_DIRECTORY;
  //       
  String _path = remotePath + "/" + f.getName();
  try {
  int y = client.list(_path).length;
  if (y == 1)
   return FTPFile.TYPE_DIRECTORY;
  else
   return FTPFile.TYPE_FILE;
  } catch (Exception e) {
  return FTPFile.TYPE_FILE;
  }
 } else {
  try {
  client.changeDirectory(remotePath);
  return FTPFile.TYPE_DIRECTORY;
  } catch (Exception e) {
  return -1;
  }
 }
 }
public static long getFileLength(FTPClient client, String remotePath) throws Exception {
 String remoteFormatPath = PathToolkit.formatPath4FTP(remotePath);
 if(isExist(client, remotePath) == 0) {
  FTPFile[] files = client.list(remoteFormatPath);
  return files[0].getSize();

 }else {
  throw new Exception("get remote file length error!");
 }
 }

 /**
 *   FTP  ,                
 * 
 * @param client
 *  FTP   
 * @return     ,       ,     null    true,             false
 */

 public static boolean closeConnection(FTPClient client) {
 if (client == null)
  return true;
 if (client.isConnected()) {
  try {
  client.disconnect(true);
  return true;
  } catch (Exception e) {
  try {
   client.disconnect(false);
  } catch (Exception e1) {
   e1.printStackTrace();
   return false;
  }
  }
 }
 return true;
 }
}
로그 인,다운로드 시작,다운로드 취소,업그레이드 파일 버 전 번호 와 서버 버 전 검사 등 을 포함한다.다른 것 은 데이터베이스,SD 카드 파일 과 관련 된 작업 입 니 다.마지막 으로 다운로드 가 끝 난 후에 파일 에 대한 압축 을 풀 고 업그레이드 작업 을 해 야 합 니 다.이 부분 은 ZipExtractor.자바 와 OTAProvider.자바 에서 이 루어 집 니 다.
예제 코드 다운로드 클릭
총결산
안 드 로 이 드 가 ftp 방식 으로 파일 업로드 와 다운 로드 를 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 안 드 로 이 드 ftp 파일 업로드 다운로드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기