From 1f527572e7d1dc4a1a220ab4b1a8e0410c4e4f1a Mon Sep 17 00:00:00 2001 From: AriaLyy <511455842@qq.com> Date: Thu, 27 Jul 2017 18:14:41 +0800 Subject: [PATCH] upload --- .../aria/core/inf/AbsUploadTarget.java | 56 +++++++++- .../aria/core/upload/FtpUploadTarget.java | 74 +++++++++++++ .../aria/core/upload/UploadEntity.java | 14 ++- .../aria/core/upload/UploadListener.java | 2 + .../aria/core/upload/UploadTarget.java | 41 +------ .../arialyy/aria/core/upload/UploadUtil.java | 3 +- .../{ => uploader}/IUploadListener.java | 4 +- .../core/upload/uploader/IUploadUtil.java | 66 ++++++++++++ .../aria/core/upload/uploader/Uploader.java | 101 ++++++++++++++++++ .../java/com/arialyy/aria/util/CheckUtil.java | 8 ++ .../aria/core/upload/UploadTaskEntity.java | 2 - 11 files changed, 324 insertions(+), 47 deletions(-) create mode 100644 Aria/src/main/java/com/arialyy/aria/core/upload/FtpUploadTarget.java rename Aria/src/main/java/com/arialyy/aria/core/upload/{ => uploader}/IUploadListener.java (87%) create mode 100644 Aria/src/main/java/com/arialyy/aria/core/upload/uploader/IUploadUtil.java create mode 100644 Aria/src/main/java/com/arialyy/aria/core/upload/uploader/Uploader.java diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsUploadTarget.java b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsUploadTarget.java index 5422007c..a5b6b141 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsUploadTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsUploadTarget.java @@ -15,12 +15,66 @@ */ package com.arialyy.aria.core.inf; +import android.support.annotation.NonNull; +import com.arialyy.aria.core.queue.UploadTaskQueue; +import com.arialyy.aria.core.upload.UploadEntity; +import com.arialyy.aria.core.upload.UploadTask; +import com.arialyy.aria.core.upload.UploadTaskEntity; +import com.arialyy.aria.util.CheckUtil; +import java.util.regex.Pattern; + /** * Created by AriaL on 2017/6/29. * 任务组超类 */ -public abstract class AbsUploadTarget +public abstract class AbsUploadTarget extends AbsTarget { + /** + * 设置上传路径 + * + * @param uploadUrl 上传路径 + */ + public TARGET setUploadUrl(@NonNull String uploadUrl) { + CheckUtil.checkDownloadUrl(uploadUrl); + if (mEntity.getUploadUrl().equals(uploadUrl)) return (TARGET) this; + mEntity.setUploadUrl(uploadUrl); + mEntity.update(); + return (TARGET) this; + } + /** + * 从数据中读取上传实体,如果数据库查不到,则新创建一个上传实体 + * + * @param filePath 上传文件的文件路径 + */ + protected UploadEntity getUploadEntity(String filePath) { + UploadEntity entity = UploadEntity.findFirst(UploadEntity.class, "filePath=?", filePath); + if (entity == null) { + entity = new UploadEntity(); + String regex = "[/|\\\\|//]"; + Pattern p = Pattern.compile(regex); + String[] strs = p.split(filePath); + String fileName = strs[strs.length - 1]; + entity.setFileName(fileName); + entity.setFilePath(filePath); + entity.insert(); + } + return entity; + } + + /** + * 下载任务是否存在 + */ + @Override public boolean taskExists() { + return UploadTaskQueue.getInstance().getTask(mEntity.getFilePath()) != null; + } + + /** + * 是否在下载 + */ + public boolean isUploading() { + UploadTask task = UploadTaskQueue.getInstance().getTask(mEntity); + return task != null && task.isRunning(); + } } diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/FtpUploadTarget.java b/Aria/src/main/java/com/arialyy/aria/core/upload/FtpUploadTarget.java new file mode 100644 index 00000000..150568c0 --- /dev/null +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/FtpUploadTarget.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.arialyy.aria.core.upload; + +import android.text.TextUtils; +import android.util.Log; +import com.arialyy.aria.core.inf.AbsUploadTarget; +import com.arialyy.aria.orm.DbEntity; + +/** + * Created by Aria.Lao on 2017/7/27. + * ftp单任务上传 + */ +public class FtpUploadTarget + extends AbsUploadTarget { + private final String TAG = "FtpUploadTarget"; + + FtpUploadTarget(String filePath, String targetName) { + this.mTargetName = targetName; + mTaskEntity = DbEntity.findFirst(UploadTaskEntity.class, "key=?", filePath); + if (mTaskEntity == null) { + mTaskEntity = new UploadTaskEntity(); + mTaskEntity.entity = getUploadEntity(filePath); + } + if (mTaskEntity.entity == null) { + mTaskEntity.entity = getUploadEntity(filePath); + } + mEntity = mTaskEntity.entity; + } + + /** + * ftp 用户登录信息 + * + * @param userName ftp用户名 + * @param password ftp用户密码 + */ + public FtpUploadTarget login(String userName, String password) { + return login(userName, password, null); + } + + /** + * ftp 用户登录信息 + * + * @param userName ftp用户名 + * @param password ftp用户密码 + * @param account ftp账号 + */ + public FtpUploadTarget login(String userName, String password, String account) { + if (TextUtils.isEmpty(userName)) { + Log.e(TAG, "用户名不能为null"); + return this; + } else if (TextUtils.isEmpty(password)) { + Log.e(TAG, "密码不能为null"); + return this; + } + mTaskEntity.userName = userName; + mTaskEntity.userPw = password; + mTaskEntity.account = account; + return this; + } +} diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java index 05bfc5cf..c97c8996 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java @@ -29,6 +29,8 @@ public class UploadEntity extends AbsNormalEntity implements Parcelable { @Primary private String filePath; //文件路径 + private String uploadUrl; //文件上传地址 + public String getFilePath() { return filePath; @@ -42,6 +44,14 @@ public class UploadEntity extends AbsNormalEntity implements Parcelable { return filePath; } + public String getUploadUrl() { + return uploadUrl; + } + + public void setUploadUrl(String uploadUrl) { + this.uploadUrl = uploadUrl; + } + public UploadEntity() { } @@ -52,14 +62,16 @@ public class UploadEntity extends AbsNormalEntity implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeString(this.filePath); + dest.writeString(this.uploadUrl); } protected UploadEntity(Parcel in) { super(in); this.filePath = in.readString(); + this.uploadUrl = in.readString(); } - @Ignore public static final Creator CREATOR = new Creator() { + public static final Creator CREATOR = new Creator() { @Override public UploadEntity createFromParcel(Parcel source) { return new UploadEntity(source); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadListener.java b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadListener.java index a4c432ae..fa9cac78 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadListener.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadListener.java @@ -15,6 +15,8 @@ */ package com.arialyy.aria.core.upload; +import com.arialyy.aria.core.upload.uploader.IUploadListener; + /** * Created by lyy on 2017/2/23. */ diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java index b6ef2f1d..fb022b26 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java @@ -24,6 +24,7 @@ import java.util.regex.Pattern; /** * Created by lyy on 2017/2/28. + * http 当文件上传 */ public class UploadTarget extends AbsUploadTarget { @@ -40,21 +41,6 @@ public class UploadTarget extends AbsUploadTarget= 0) { + // mListener.onProgress(mConstance.CURRENT_LOCATION); + //} + } + }, 0, 1000); + } + + private void closeTimer() { + if (mTimer != null) { + mTimer.purge(); + mTimer.cancel(); + } + } +} diff --git a/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java b/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java index 34c54227..ebb3aa33 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java @@ -77,6 +77,14 @@ public class CheckUtil { if (TextUtils.isEmpty(downloadUrl)) throw new IllegalArgumentException("下载链接不能为null"); } + /** + * 检测下载链接是否为null + */ + public static void checkUploadUrl(String downloadUrl) { + if (TextUtils.isEmpty(downloadUrl)) throw new IllegalArgumentException("上传地址不能为null"); + } + + /** * 检测下载链接组是否为null */ diff --git a/aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java b/aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java index 400ab641..03c377b2 100644 --- a/aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java +++ b/aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java @@ -15,7 +15,6 @@ */ package com.arialyy.aria.core.upload; -import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.inf.AbsTaskEntity; import com.arialyy.aria.orm.OneToOne; import java.util.HashMap; @@ -26,7 +25,6 @@ import java.util.Map; * 上传任务实体 */ public class UploadTaskEntity extends AbsTaskEntity { - public String uploadUrl; //上传路径 public String attachment; //文件上传需要的key public String contentType = "multipart/form-data"; //上传的文件类型 public String userAgent = "User-Agent";