修复http上传成功后,如果服务器没有设置返回码导致上传失败的问题,

This commit is contained in:
AriaLyy
2018-02-03 12:57:55 +08:00
parent 1cfcfb90b8
commit ebddc510ca
12 changed files with 68 additions and 36 deletions

View File

@@ -82,7 +82,8 @@ public abstract class AbsFtpInfoThread<ENTITY extends AbsEntity, TASK_ENTITY ext
ALog.i(TAG, s);
boolean isExist = files.length != 0;
if (!isExist && !isUpload) {
failDownload("文件不存在,任务链接【" + mTaskEntity.urlEntity.url + "", false);
failDownload("文件不存在,任务链接【" + mTaskEntity.urlEntity.url + "remotePath" + remotePath,
false);
int i = remotePath.lastIndexOf(File.separator);
FTPFile[] files1;
if (i == -1) {

View File

@@ -232,7 +232,11 @@ public abstract class AbsThreadTask<ENTITY extends AbsNormalEntity, TASK_ENTITY
ALog.w(TAG,
"任务【" + mConfig.TEMP_FILE.getName() + "】thread__" + mConfig.THREAD_ID + "__重试失败网络未连接");
}
if (mFailNum < RETRY_NUM && needRetry && NetUtils.isConnected(AriaManager.APP)) {
if (mFailNum < RETRY_NUM
&& needRetry
&& NetUtils.isConnected(AriaManager.APP)
&& !STATE.isCancel
&& !STATE.isStop) {
mFailTimer = new Timer(true);
mFailTimer.schedule(new TimerTask() {
@Override public void run() {

View File

@@ -18,8 +18,8 @@ package com.arialyy.aria.core.upload;
import android.os.Parcel;
import android.os.Parcelable;
import com.arialyy.aria.core.inf.AbsNormalEntity;
import com.arialyy.aria.orm.Foreign;
import com.arialyy.aria.core.inf.AbsTaskEntity;
import com.arialyy.aria.orm.Foreign;
import com.arialyy.aria.orm.Primary;
/**
@@ -29,6 +29,19 @@ import com.arialyy.aria.orm.Primary;
public class UploadEntity extends AbsNormalEntity implements Parcelable {
@Primary @Foreign(table = UploadTaskEntity.class, column = "key") private String filePath; //文件路径
/**
* 上传完成后服务器返回的数据
*/
private String responseStr = "";
public String getResponseStr() {
return responseStr;
}
public void setResponseStr(String responseStr) {
this.responseStr = responseStr;
}
public String getFilePath() {
return filePath;
}

View File

@@ -19,6 +19,7 @@ import com.arialyy.aria.core.common.AbsFtpInfoThread;
import com.arialyy.aria.core.common.OnFileInfoCallback;
import com.arialyy.aria.core.upload.UploadEntity;
import com.arialyy.aria.core.upload.UploadTaskEntity;
import com.arialyy.aria.util.ALog;
import com.arialyy.aria.util.CommonUtil;
import java.io.File;
import java.util.Properties;
@@ -29,6 +30,7 @@ import org.apache.commons.net.ftp.FTPFile;
* 单任务远程服务器文件信息
*/
class FtpFileInfoThread extends AbsFtpInfoThread<UploadEntity, UploadTaskEntity> {
private static final String TAG = "FtpUploadFtpFileInfoThread";
static final int CODE_COMPLETE = 0xab1;
private boolean isComplete = false;
@@ -56,12 +58,21 @@ class FtpFileInfoThread extends AbsFtpInfoThread<UploadEntity, UploadTaskEntity>
if (ftpFile.getSize() == mEntity.getFileSize()) {
isComplete = true;
} else {
ALog.w(TAG, "FTP服务器已存在未完成的文件【"
+ ftpFile.getName()
+ "size: "
+ ftpFile.getSize()
+ ""
+ "尝试从位置:"
+ ftpFile.getSize()
+ "开始上传");
File configFile = new File(CommonUtil.getFileConfigPath(false, mEntity.getFileName()));
Properties pro = CommonUtil.loadConfig(configFile);
String key = mEntity.getFileName() + "_record_" + 0;
mTaskEntity.isNewTask = false;
long oldRecord = Long.parseLong(pro.getProperty(key, "0"));
if (oldRecord != 0) {
//修改本地保存的停止地址为服务器上的真实地址
if (oldRecord == 0) {
//修改本地保存的停止地址为服务器上对应文件的大小
pro.setProperty(key, ftpFile.getSize() + "");
CommonUtil.saveConfig(configFile, pro);
}

View File

@@ -89,7 +89,8 @@ class HttpThreadTask extends AbsThreadTask<UploadEntity, UploadTaskEntity> {
addFormField(writer, key, mTaskEntity.formFields.get(key));
}
uploadFile(writer, mTaskEntity.attachment, uploadFile);
finish(writer);
mTaskEntity.getEntity().setResponseStr(finish(writer));
mListener.onComplete();
} catch (Exception e) {
e.printStackTrace();
fail();
@@ -167,7 +168,6 @@ class HttpThreadTask extends AbsThreadTask<UploadEntity, UploadTaskEntity> {
STATE.isRunning = false;
return;
}
mListener.onComplete();
STATE.isRunning = false;
}
@@ -184,6 +184,7 @@ class HttpThreadTask extends AbsThreadTask<UploadEntity, UploadTaskEntity> {
writer.close();
int status = mHttpConn.getResponseCode();
if (status == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(mHttpConn.getInputStream()));
String line;
@@ -193,10 +194,9 @@ class HttpThreadTask extends AbsThreadTask<UploadEntity, UploadTaskEntity> {
reader.close();
mHttpConn.disconnect();
} else {
ALog.w(TAG, "state_code = " + status);
fail();
ALog.e(TAG, "response msg: " + mHttpConn.getResponseMessage() + "code: " + status);
// fail();
}
writer.flush();
writer.close();
mOutputStream.close();

View File

@@ -34,7 +34,7 @@ import java.util.Map;
class DBConfig {
static Map<String, Class> mapping = new HashMap<>();
static String DB_NAME;
static int VERSION = 22;
static int VERSION = 23;
static {
if (TextUtils.isEmpty(DB_NAME)) {