1. 程式人生 > >Android FTP 客戶端 上傳/下載 帶進度條實戰原始碼

Android FTP 客戶端 上傳/下載 帶進度條實戰原始碼

關於FTP我們在Android開發的時候先說一下特別需要注意,就當是正餐之前調味吧。

1.FTP是基於TCP/IP協議的常用埠是:21,也就是如果不設定埠實際上就是訪問了21埠

2.FTP程式設計要特別考慮到編碼的問題,尤其是要和FTP服務的編碼能匹配,實際上一搬都是UTF-8,Android也是UTF-8,所以大部分時候沒問題,但是一旦亂碼就要想想是不是客戶端的編碼和服務端編碼不匹配了。

3.由於Android上程式設計要求任何帶網若訪問的類不能放在主UI的絢爛執行緒,所以一定要注意另開執行緒使用這個包裡FTP類org.apache.commons.net.ftp.FTPClient。

4.記得 <uses-permission android:name="android.permission.INTERNET" />加在AndroidManifest.xml之後

5.注意FTP服務起如果和客戶端長時間沒有資訊互動可能會自動斷開當前連線,所以根據實際情況每隔一段時間呼叫FTPClient類下的sendNoOp()方法這類似於心跳包。

下面是正餐直接上Demo效果圖,有圖有真相呵呵,功能一目瞭然,上傳下載都有進度條,貼出原始碼下載地址,只要1分。


我封裝一個工具類UitlsFTP(見原始碼),來處理FTP的連線,上傳/下載,都是帶進度的額
說一下程式碼的中關鍵小技巧部分,雖然利用重寫InputStream的Read方法可以輕鬆實現進度監控,但是為了絢爛UI時節約效能,可以根據實際情況選擇每隔300ms或是200ms渲染一次進度,我這裡就是200ms絢爛一次

UtilsFTP.IProgressListener listener = new UtilsFTP.IProgressListener() {
	long BEG=0;
	@Override
	public void onProgress(long len, long total) {
		if(System.currentTimeMillis()-BEG>200||len==total)
		{
			BEG=System.currentTimeMillis();
			String result = String.format("%.2f", 100 * (double) len / (double) total);
			showTV(result + "%");
		}
	}
};
InputStream in2 = self.getResources().getAssets().open("a.mp3");
ftp.uploadWithProgress("001test/download3/我.mp3", in2, listener);


相關推薦

Android FTP 客戶 /下載 進度實戰原始碼

關於FTP我們在Android開發的時候先說一下特別需要注意,就當是正餐之前調味吧。 1.FTP是基於TCP/IP協議的常用埠是:21,也就是如果不設定埠實際上就是訪問了21埠 2.FTP程式設計要特別考慮到編碼的問題,尤其是要和FTP服務的編碼能匹配,實際上一搬都是U

android EasyRxRetrofit封裝(包括下載進度監聽)

前言 很久以前封裝過一次RxJava+Retrofit,最近想著把檔案上傳的進度監聽、檔案下載及進度監聽加入進去。由於之前的封裝太過匆忙,可用性太低,所以重新封裝了一個,令其可真正使用於實際專案中,命名為EasyRxRetrofit,使用RxJava2

Extjs 使用fileupload外掛檔案 進度顯示

一.首先我們看看官方給出的外掛的解釋: 一個檔案上傳表單項具有自定義的樣式,並且可以控制按鈕的文字和 像文字表單的空文字類似的其他特性。 它使用一個隱藏的檔案輸入元素,並在使用者選擇檔案後 在form提交的同時執行實際的檔案上傳。 因為沒有安全的跨瀏覽器以程式設計的方式對file表單項設值的方式,

Xutils實現視訊顯示進度

寫了個xutils的上傳帶進度條。和大家分享下。希望給點建議。先上個圖 這裡就只貼出重要的上傳部分,其他的佈局,按鈕事件我想應該都很簡單的吧! 這裡就不貼出來了。有需要可留言。 -- -- 先給俺定義的變數和Button,待會要用。 private Button sure

使用Jquery開源外掛實現檔案進度

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <

總結:ajax多檔案進度,前端篇

前言: 之前寫過一個檔案上傳的模組,但是是多個input上傳的,而且使用的是jQuery.form打包上傳的,這樣子就覺得還是有點不太方便。 1.提交的時候需要將整個form提交上去,換句話說就是需要將要提交的內容使用form

利用Plupload解決大容量檔案問題, 進度和背景遮罩層

大容量檔案上傳早已不是什麼新鮮問題,在.net 2.0時代,Html5也還沒有問世,要實現這樣的功能,要麼是改web.config,要麼是用flash,要麼是用一些第三方控制元件,然而這些解決問題的方法要麼很麻煩,比如改配置,要麼不穩定,比如檔案上G以後,上傳要

Linux使用Shell腳本實現ftp的自動下載

binary http linux user 文件中 get cal 文件重定向 tab 1. ftp自動登錄批量下載文件。#####從ftp服務器上的/home/data 到 本地的/home/databackup#####!/bin/bashftp -n<<

SharePoint 設置客戶文件大小

documents sof dmi over p s sha mic ces note in sharepoint 2013, 2016 , there is a limitatoin on the size of the uploading files , default

FTP文件下載

交互 case 所有 緩沖 沒有 如果 bye command AR ftp ftp [-v] [-n] [-i] [-d] [-g] [-s:filename] [-a] [-w:windowsize] [computer] 參數-v 禁止顯示遠程服務器響應。-n 禁

FastDFS的Python客戶 -- 通過客戶圖片並訪問

本文的前提是已經啟動FastDFS的tracker和storage ㈠ 安裝 將檔案 fdfs_client-py-master.zip 存放在pycharm中,然後再終端進行安裝: pip install fdfs_client-py-master.zip (安裝包後

騰訊雲視訊點播怎麼在web客戶視訊

首先,騰訊雲的文件已經說的很清楚了,一定要認真看完: 騰訊雲客戶端上傳文件 以下是我實現功能中碰到的問題: 如何通過js獲取input file 的物件 如何指定上傳後的視訊自動轉碼和截圖等任務流 如何在上傳時指定檔案分類和檔名 如何取消上傳 如何通過js獲

如何在客戶shell指令碼檔案,並利用PHP呼叫執行指令碼

題目中的上傳包含兩部分,一部分是上傳檔案,一部分是利用PHP執行指令碼 上傳檔案到指定資料夾 所謂檔案上傳是指將本地文字檔案,圖片視訊或者音訊等檔案上傳到伺服器上,以供後續操作的過程。 上傳檔案有幾種方式,包括: - 單純的form表單上傳提交 使

雲端儲存Java客戶檔案

什麼是雲端儲存 準確來說應該稱為物件儲存。雲端儲存是比較流行的一種雲服務,提供圖片、視訊等檔案的儲存服務。具有代表性的產品有:七牛雲、阿里雲物件儲存OSS、又拍雲、騰訊雲物件儲存服務COS。 雲端儲存能做什麼 打個比方,檔案上傳這種需求在開發中會經常遇

【FastDFS分散式檔案系統之二】:FastDFS小檔案效能測試及Python客戶操作

  由於要對比swift上傳小檔案以及fdfs上傳小檔案的效能,故做效能測試。 1.1 測試環境: FastDFS叢集的搭建方法:【FastDFS分散式檔案系統之一】:搭建、部署、配置 tracker server1:node2 tracker server2:node3

JMeter建立FTP測試伺服器下載效能

在工作中,有時候我們會對伺服器的上傳下載效能進行測試,於是就整理了工作中測試ftp上傳下載的是實戰總結。測試環境:jmeter 我使用的是apache-jmeter-2.13測試伺服器是阿里雲上的真實伺服器,IP:***.***.***.*** (為了伺服器安全,我就不寫那麼

Java後臺伺服器接收IOS客戶的圖片

// 定義變數儲存圖片地址 String imagePath=""; // 接收圖片資料 (base64) String image=httpRequest.getParameter("imag

GitHub通過客戶本地專案

好久沒有寫部落格了,一個小皮皮蝦成為一個程式設計師真難,最近半年一直學習hybrid,ionic+angularJS+cordova框架,磕磕絆 絆的算是完成了一個專案,其中收穫不少,閒話少扯,我們言歸正傳.github應該都聽過,可是網上介紹的都是用命令列上傳 程式碼,今天我來教大家用客戶端上傳,

黑馬程式設計師 【】java學習之路——TCP(三)客戶檔案到伺服器

import java.net.*; class  TextClient {public static void main(String[] args) throws Exception{Socket s = new Socket("192.168.1.104",10010);BufferedReader b

.net,C#,Ftp各種操作,,下載,刪除檔案,建立目錄,刪除目錄,獲得檔案列表...

using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO; using System.Windows.Forms; namespace ConvertData {