我正在使用 Apache 和 Async 在 FTP 上上传文件。问题在于,在大文件(即 200 Mb)上,进度条会重新开始其进度,但上传仍在继续(我从计算机上检查了 FTP)。
这是我在 Logcat 中看到的:
1->2->3->4->5->6->7->8-> -8 -> -7 .... to 8 and starts again
异步后台代码:
con = new FTPClient();
con.setConnectTimeout(300000);
con.setDataTimeout(300000);
// con.setKeepAlive(true);
con.connect("host IP",21);
if (con.login("user", "password"))
{
con.enterLocalPassiveMode(); // important!
con.setFileType(FTP.BINARY_FILE_TYPE);
boolean directoryExists = con.changeWorkingDirectory(Email);
File CloudVersionSysForRestore = new File(getFilesDir()+File.separator+"Cloud Version.itb");
try {
CloudVersionSysForRestore.createNewFile();
OutputStream OutstreamCloud = new FileOutputStream(new File(CloudVersionSysForRestore.getPath()));
con.retrieveFile("/"+Email+"/Cloud Version.itb", OutstreamCloud);
OutstreamCloud.close();
if(x!=2){
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(getFilesDir()+File.separator+"Cloud Version.itb")));
String read;
StringBuilder builder = new StringBuilder("");
while((read = bufferedReader.readLine()) != null) {
Log.w("READ", read);
builder.append(read);
}
bufferedReader.close();
long getintfromstring = Long.parseLong(builder.toString());
if(getintfromstring<Version){
Log.w("Version", String.valueOf(Version));
try{
/************************************ UPLOAD + Progress ****************************/
long fileSize = DBToUploadFromInternalStorage.length();
int sentBytes = 0;
InputStream inputStream = new FileInputStream(DBToUploadFromInternalStorage);
System.out.println("Start uploading second file");
OutputStream outputStream = con.storeFileStream("PilotLogbookDB.itb");
byte[] bytesIn = new byte[4 * 1024];
int read1 = 0;
while ((read1 = inputStream.read(bytesIn)) !=-1) {
outputStream.write(bytesIn, 0, read1);
sentBytes+=read1;
final int progress = (int) ((sentBytes * 100) / fileSize);
runOnUiThread(new Runnable() {
public void run() {
pd.setProgress(progress);
Log.w("Progress", String.valueOf(progress));
}
});
}
outputStream.close();
inputStream.close();
/************************************ UPLOAD + Progress ****************************/
}
catch(Exception e){
e.printStackTrace();
x=2;
}
boolean completed = con.completePendingCommand();
对于龙来说是这样的吗?
/************************************ UPLOAD + Progress ****************************/
long fileSize = DBToUploadFromInternalStorage.length();
long sentBytes = 0;
InputStream inputStream = new FileInputStream(DBToUploadFromInternalStorage);
System.out.println("Start uploading second file");
OutputStream outputStream = con.storeFileStream("PilotLogbookDB.itb");
byte[] bytesIn = new byte[4 * 1024];
int read1 = 0;
while ((read1 = inputStream.read(bytesIn)) !=-1) {
outputStream.write(bytesIn, 0, read1);
sentBytes+=read1;
final long progress = (long) ((sentBytes * 100) / fileSize);
runOnUiThread(new Runnable() {
public void run() {
pd.setProgress(Long.bitCount(progress));
Log.w("Progress", String.valueOf(progress));
}
});
}
outputStream.close();
inputStream.close();
/************************************ UPLOAD + Progress ****************************/