upload
This commit is contained in:
@ -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<TARGET extends AbsUploadTarget, ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity>
|
||||
public abstract class AbsUploadTarget<TARGET extends AbsUploadTarget, ENTITY extends UploadEntity, TASK_ENTITY extends UploadTaskEntity>
|
||||
extends AbsTarget<TARGET, ENTITY, TASK_ENTITY> {
|
||||
|
||||
/**
|
||||
* 设置上传路径
|
||||
*
|
||||
* @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();
|
||||
}
|
||||
}
|
||||
|
@ -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<FtpUploadTarget, UploadEntity, UploadTaskEntity> {
|
||||
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;
|
||||
}
|
||||
}
|
@ -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<UploadEntity> CREATOR = new Creator<UploadEntity>() {
|
||||
public static final Creator<UploadEntity> CREATOR = new Creator<UploadEntity>() {
|
||||
@Override public UploadEntity createFromParcel(Parcel source) {
|
||||
return new UploadEntity(source);
|
||||
}
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -24,6 +24,7 @@ import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* Created by lyy on 2017/2/28.
|
||||
* http 当文件上传
|
||||
*/
|
||||
public class UploadTarget extends AbsUploadTarget<UploadTarget, UploadEntity, UploadTaskEntity> {
|
||||
|
||||
@ -40,21 +41,6 @@ public class UploadTarget extends AbsUploadTarget<UploadTarget, UploadEntity, Up
|
||||
mEntity = mTaskEntity.entity;
|
||||
}
|
||||
|
||||
private 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置userAgent
|
||||
*/
|
||||
@ -63,16 +49,6 @@ public class UploadTarget extends AbsUploadTarget<UploadTarget, UploadEntity, Up
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置上传路径
|
||||
*
|
||||
* @param uploadUrl 上传路径
|
||||
*/
|
||||
public UploadTarget setUploadUrl(@NonNull String uploadUrl) {
|
||||
mTaskEntity.uploadUrl = uploadUrl;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置服务器需要的附件key
|
||||
*
|
||||
@ -92,19 +68,4 @@ public class UploadTarget extends AbsUploadTarget<UploadTarget, UploadEntity, Up
|
||||
mTaskEntity.contentType = contentType;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载任务是否存在
|
||||
*/
|
||||
@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();
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
package com.arialyy.aria.core.upload;
|
||||
|
||||
import android.util.Log;
|
||||
import com.arialyy.aria.core.upload.uploader.IUploadListener;
|
||||
import com.arialyy.aria.util.CheckUtil;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
@ -80,7 +81,7 @@ final class UploadUtil implements Runnable {
|
||||
mListener.onPre();
|
||||
URL url;
|
||||
try {
|
||||
url = new URL(mTaskEntity.uploadUrl);
|
||||
url = new URL(mUploadEntity.getUploadUrl());
|
||||
mHttpConn = (HttpURLConnection) url.openConnection();
|
||||
mHttpConn.setUseCaches(false);
|
||||
mHttpConn.setDoOutput(true);
|
||||
|
@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.arialyy.aria.core.upload;
|
||||
package com.arialyy.aria.core.upload.uploader;
|
||||
|
||||
import com.arialyy.aria.core.inf.IEventListener;
|
||||
|
||||
@ -21,6 +21,6 @@ import com.arialyy.aria.core.inf.IEventListener;
|
||||
* Created by lyy on 2017/2/9.
|
||||
* 上传监听
|
||||
*/
|
||||
interface IUploadListener extends IEventListener {
|
||||
public interface IUploadListener extends IEventListener {
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* 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.uploader;
|
||||
|
||||
/**
|
||||
* Created by lyy on 2016/10/31.
|
||||
* 抽象的下载接口
|
||||
*/
|
||||
public interface IUploadUtil {
|
||||
|
||||
/**
|
||||
* 获取文件大小
|
||||
*/
|
||||
long getFileSize();
|
||||
|
||||
/**
|
||||
* 获取当前上传位置
|
||||
*/
|
||||
long getCurrentLocation();
|
||||
|
||||
/**
|
||||
* 是否正在下载
|
||||
*
|
||||
* @return true, 正在下载
|
||||
*/
|
||||
boolean isUploading();
|
||||
|
||||
/**
|
||||
* 取消下载
|
||||
*/
|
||||
void cancelUpload();
|
||||
|
||||
/**
|
||||
* 停止下载
|
||||
*/
|
||||
void stopUpload();
|
||||
|
||||
/**
|
||||
* 开始下载
|
||||
*/
|
||||
void startUpload();
|
||||
|
||||
/**
|
||||
* 从上次断点恢复下载
|
||||
*/
|
||||
void resumeUpload();
|
||||
|
||||
/**
|
||||
* 设置最大下载速度
|
||||
*/
|
||||
void setMaxSpeed(double maxSpeed);
|
||||
}
|
@ -0,0 +1,101 @@
|
||||
/*
|
||||
* 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.uploader;
|
||||
|
||||
import com.arialyy.aria.core.upload.UploadEntity;
|
||||
import com.arialyy.aria.core.upload.UploadTaskEntity;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/27.
|
||||
* 文件上传器
|
||||
*/
|
||||
public class Uploader implements Runnable, IUploadUtil {
|
||||
|
||||
private IUploadListener mListener;
|
||||
private UploadTaskEntity mTaskEntity;
|
||||
private UploadEntity mEntity;
|
||||
private long mCurrentLocation = 0;
|
||||
|
||||
private Timer mTimer;
|
||||
private boolean isRunning;
|
||||
|
||||
Uploader(IUploadListener listener, UploadTaskEntity taskEntity) {
|
||||
mListener = listener;
|
||||
mTaskEntity = taskEntity;
|
||||
mEntity = mTaskEntity.getEntity();
|
||||
}
|
||||
|
||||
@Override public long getFileSize() {
|
||||
return mEntity.getFileSize();
|
||||
}
|
||||
|
||||
@Override public long getCurrentLocation() {
|
||||
return mCurrentLocation;
|
||||
}
|
||||
|
||||
@Override public boolean isUploading() {
|
||||
return isRunning;
|
||||
}
|
||||
|
||||
@Override public void cancelUpload() {
|
||||
isRunning = false;
|
||||
}
|
||||
|
||||
@Override public void stopUpload() {
|
||||
isRunning = false;
|
||||
}
|
||||
|
||||
@Override public void startUpload() {
|
||||
new Thread(this).start();
|
||||
}
|
||||
|
||||
@Override public void resumeUpload() {
|
||||
startUpload();
|
||||
}
|
||||
|
||||
@Override public void setMaxSpeed(double maxSpeed) {
|
||||
|
||||
}
|
||||
|
||||
@Override public void run() {
|
||||
isRunning = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动进度获取定时器
|
||||
*/
|
||||
private void startTimer() {
|
||||
mTimer = new Timer(true);
|
||||
mTimer.schedule(new TimerTask() {
|
||||
@Override public void run() {
|
||||
//if (mConstance.isComplete() || !mConstance.isDownloading) {
|
||||
// closeTimer();
|
||||
//} else if (mConstance.CURRENT_LOCATION >= 0) {
|
||||
// mListener.onProgress(mConstance.CURRENT_LOCATION);
|
||||
//}
|
||||
}
|
||||
}, 0, 1000);
|
||||
}
|
||||
|
||||
private void closeTimer() {
|
||||
if (mTimer != null) {
|
||||
mTimer.purge();
|
||||
mTimer.cancel();
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
*/
|
||||
|
@ -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<UploadEntity> {
|
||||
public String uploadUrl; //上传路径
|
||||
public String attachment; //文件上传需要的key
|
||||
public String contentType = "multipart/form-data"; //上传的文件类型
|
||||
public String userAgent = "User-Agent";
|
||||
|
Reference in New Issue
Block a user