Android中關於FTP的檔案上傳和下載
具體實現看程式碼註釋寫的很詳細。package ryancheng.example.progressbar; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; 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; import android.os.Environment; public class FTPManager { FTPClient ftpClient = null; public FTPManager() { ftpClient = new FTPClient(); } // 連線到ftp伺服器 public synchronized boolean connect() throws Exception { boolean bool = false; if (ftpClient.isConnected()) {//判斷是否已登陸 ftpClient.disconnect(); } ftpClient.setDataTimeout(20000);//設定連線超時時間 ftpClient.setControlEncoding("utf-8"); ftpClient.connect("ip地址", 埠); if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { if (ftpClient.login("使用者名稱", "密碼")) { bool = true; System.out.println("ftp連線成功"); } } return bool; } // 建立資料夾 public boolean createDirectory(String path) throws Exception { boolean bool = false; String directory = path.substring(0, path.lastIndexOf("/") + 1); int start = 0; int end = 0; if (directory.startsWith("/")) { start = 1; } end = directory.indexOf("/", start); while (true) { String subDirectory = directory.substring(start, end); if (!ftpClient.changeWorkingDirectory(subDirectory)) { ftpClient.makeDirectory(subDirectory); ftpClient.changeWorkingDirectory(subDirectory); bool = true; } start = end + 1; end = directory.indexOf("/", start); if (end == -1) { break; } } return bool; } // 實現上傳檔案的功能 public synchronized boolean uploadFile(String localPath, String serverPath) throws Exception { // 上傳檔案之前,先判斷本地檔案是否存在 File localFile = new File(localPath); if (!localFile.exists()) { System.out.println("本地檔案不存在"); return false; } System.out.println("本地檔案存在,名稱為:" + localFile.getName()); createDirectory(serverPath); // 如果資料夾不存在,建立資料夾 System.out.println("伺服器檔案存放路徑:" + serverPath + localFile.getName()); String fileName = localFile.getName(); // 如果本地檔案存在,伺服器檔案也在,上傳檔案,這個方法中也包括了斷點上傳 long localSize = localFile.length(); // 本地檔案的長度 FTPFile[] files = ftpClient.listFiles(fileName); long serverSize = 0; if (files.length == 0) { System.out.println("伺服器檔案不存在"); serverSize = 0; } else { serverSize = files[0].getSize(); // 伺服器檔案的長度 } if (localSize <= serverSize) { if (ftpClient.deleteFile(fileName)) { System.out.println("伺服器檔案存在,刪除檔案,開始重新上傳"); serverSize = 0; } } RandomAccessFile raf = new RandomAccessFile(localFile, "r"); // 進度 long step = localSize / 100; long process = 0; long currentSize = 0; // 好了,正式開始上傳檔案 ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setRestartOffset(serverSize); raf.seek(serverSize); OutputStream output = ftpClient.appendFileStream(fileName); byte[] b = new byte[1024]; int length = 0; while ((length = raf.read(b)) != -1) { output.write(b, 0, length); currentSize = currentSize + length; if (currentSize / step != process) { process = currentSize / step; if (process % 10 == 0) { System.out.println("上傳進度:" + process); } } } output.flush(); output.close(); raf.close(); if (ftpClient.completePendingCommand()) { System.out.println("檔案上傳成功"); return true; } else { System.out.println("檔案上傳失敗"); return false; } } // 實現下載檔案功能,可實現斷點下載 public synchronized boolean downloadFile(String localPath, String serverPath) throws Exception { // 先判斷伺服器檔案是否存在 FTPFile[] files = ftpClient.listFiles(serverPath); if (files.length == 0) { System.out.println("伺服器檔案不存在"); return false; } System.out.println("遠端檔案存在,名字為:" + files[0].getName()); localPath = localPath + files[0].getName(); // 接著判斷下載的檔案是否能斷點下載 long serverSize = files[0].getSize(); // 獲取遠端檔案的長度 File localFile = new File(localPath); long localSize = 0; if (localFile.exists()) { localSize = localFile.length(); // 如果本地檔案存在,獲取本地檔案的長度 if (localSize >= serverSize) { System.out.println("檔案已經下載完了"); File file = new File(localPath); file.delete(); System.out.println("本地檔案存在,刪除成功,開始重新下載"); return false; } } // 進度 long step = serverSize / 100; long process = 0; long currentSize = 0; // 開始準備下載檔案 ftpClient.enterLocalActiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); OutputStream out = new FileOutputStream(localFile, true); ftpClient.setRestartOffset(localSize); InputStream input = ftpClient.retrieveFileStream(serverPath); byte[] b = new byte[1024]; int length = 0; while ((length = input.read(b)) != -1) { out.write(b, 0, length); currentSize = currentSize + length; if (currentSize / step != process) { process = currentSize / step; if (process % 10 == 0) { System.out.println("下載進度:" + process); } } } out.flush(); out.close(); input.close(); // 此方法是來確保流處理完畢,如果沒有此方法,可能會造成現程式死掉 if (ftpClient.completePendingCommand()) { System.out.println("檔案下載成功"); return true; } else { System.out.println("檔案下載失敗"); return false; } } // 如果ftp上傳開啟,就關閉掉 public void closeFTP() throws Exception { if (ftpClient.isConnected()) { ftpClient.disconnect(); } } }
相關推薦
Android關於FTP檔案上傳和下載功能詳解
Android關於FTP檔案上傳和下載功能詳解 更新時間:2017年09月21日 11:41:14 作者:一諾的祕密花園 我要評論 這篇文章主要為大家詳細介紹了Android關於FTP檔案上傳和下載功能,具有一定的參考價值,感興趣
JavaWeb中的檔案上傳和下載
對於檔案上傳,瀏覽器在上傳的過程中是將檔案以流的形式提交到伺服器端的,如果直接使用Servlet獲取上傳檔案的輸入流然後再解析裡面的請求引數是比較麻煩,所以一般選擇採用apache的開源工具common-fileupload這個檔案上傳元件。這個common-fileupl
如何在基於Java的Web專案中實現檔案上傳和下載?
在Sevlet 3 以前,Servlet API中沒有支援上傳功能的API,因此要實現上傳功能需要引入第三方工具從POST請求中獲得上傳的附件或者通過自行處理輸入流來獲得上傳的檔案,我們推薦使用Apac
在SpringMVC框架中實現檔案上傳和下載
首先在springmvc.xml中配置檔案上傳的屬性 <!-- 檔案上傳的屬性值 --> <bean id="multipartResolver" class="org.springframework.web.multi
Android中關於FTP的檔案上傳和下載
package ryancheng.example.progressbar; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; impo
如何在命令列中使用 ftp 命令上傳和下載檔案
本文中,介紹在 Linux shell 中如何使用 ftp 命令。包括如何連線 FTP 伺服器,上傳或下載檔案以及建立資料夾。儘管現在有許多不錯的 FTP 桌面應用,但是在伺服器、SSH、遠端會話中命令列 ftp 命令還是有很多應用的。比如。需要伺服器從 ftp 倉庫拉取
Spring MVC中檔案上傳和下載
檔案上傳 檔案上傳需將表格的提交方式設為"POST",並且將enctype設為"multipart/form-data",以二進位制的方式提交資料。 spring mvc中可通過MultipartResolver監聽每個請求,如有上傳的檔案,則把請求封裝為MultipartH
Java 實現ftp 檔案上傳、下載和刪除
本文利用apache ftp工具實現檔案的上傳下載和刪除。具體如下: 1、下載相應的jar包 commons-net-1.4.1.jar 2、實現程式碼如下: public class FtpUtils { //ftp伺服器地址
java 中 FtpClient 實現 FTP 檔案上傳、下載
package ftp; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWrit
Android Retrofit2.0實現檔案上傳和下載
這篇主要介紹retrofit框架的上傳檔案到伺服器和從伺服器下載功能的實現 上傳檔案到伺服器 首先 retrofit2.0之前上傳檔案到伺服器需要一個叫TypedFile這個類,但是在2.0版本,這個類被取消了,因為2.0以後,retrofit內部集成了okhttp
表單中檔案上傳和下載
檔案上傳和下載的實質:檔案拷貝 檔案上傳:從本地拷貝到伺服器磁碟上 客戶端需要編寫檔案上傳表單---->服務端需要編寫程式碼接受上傳的檔案 檔案下載:從伺服器磁碟上拷貝到本地磁碟 需要編寫服務端的程式碼,客戶端的下載的工作瀏覽器核心解決的
c#中winform方式的檔案上傳和下載高效最新方法
網上很多檔案上傳下載的文章,多數是採用http方式,使用.net的webcliend的功能,此功能對大檔案效率比較低,對web伺服器安全性也有影響。 我採用資料庫的方式同樣實現並高效的處理了此功能,對於資料庫winform應用值得借鑑。 開發思路(以下思路是c/s三層架構,
javaExcel檔案上傳和下載
上傳在頁面必須加上下面屬性 <form method="post" enctype="multipart/form-data" target="frameFile" action="${vehiclePath }/bindVehicle?${_csrf.parameterName}=$
Spring 中的檔案上傳與下載控制
先建立根應用上下文配置,WebDemo/src/main/java/com/seliote/webdemo/config/RootContextConfig.java package com.seliote.webdemo.config; import org.springframework.c
xshell 檔案上傳和下載
xshell 檔案上傳和下載 介紹兩種方式:命令、工具 上傳和下載參照物件是本機 命令: 1.sz 檔案下載(檔案大小限制 4G) 2.rz 檔案上傳 工具: File Transfer(工具欄中有) 這個沒有上
Struts2的檔案上傳和下載(1)單檔案上傳
在struts2中整合fileuoload功能,因為在匯入的jar包中包含了common-fileipload.jar檔案 在struts2中的interceptor 中有一個fileupload攔截器,他的主要功能就是完成檔案上傳。 注意事項 method=post
SpringMVC檔案上傳和下載
1. 檔案上傳 SpringMVC通過MultipartResolver來實現檔案上傳,預設沒有裝配,使用MultipartResolver需要加上commons-fileupload這個jar包。 1.1 配置MultipartResolver <!--配置上傳檔案控制元
**#使用springboot進行檔案上傳和下載**
使用springboot進行檔案上傳和下載 ##檔案下載功能的實現思路: 1.獲取要下載的檔案的絕對路徑 2.獲取要下載的檔名 3.設定content-disposition響應頭控制瀏覽器以下載的形式開啟檔案 4.獲取要下載的檔案輸入流 5.建立資料緩衝區//緩衝區解釋
asp.net 檔案上傳和下載管理原始碼
利用asp.net進行檔案上傳和下載時非常常用的功能,現做整理,將原始碼上傳,提供給初學者參考,以下程式碼中的樣式檔案就不上傳了,下載者請將樣式去掉。 效果圖如下: <%@ Page Language="C#" AutoEventWireu
基於OkHttp網路通訊工具類(傳送get、post請求、檔案上傳和下載)
一、為什麼要用OkHttp? okhttp是專注於提升網路連線效率的http客戶端。 優點: 1、它能實現同一ip和埠的請求重用一個socket,這種方式能大大降低網路連線的時間,和每次請求都建立socket,再斷開socket的方式相比,降低了伺服器伺服器的壓力。 2、okhttp 對