package com.ben.cheng.utils;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import com.alibaba.sdk.android.oss.ClientException;
import com.alibaba.sdk.android.oss.OSSClient;
import com.alibaba.sdk.android.oss.ServiceException;
import com.alibaba.sdk.android.oss.callback.OSSCompletedCallback;
import com.alibaba.sdk.android.oss.callback.OSSProgressCallback;
import com.alibaba.sdk.android.oss.internal.OSSAsyncTask;
import com.alibaba.sdk.android.oss.model.CopyObjectRequest;
import com.alibaba.sdk.android.oss.model.CopyObjectResult;
import com.alibaba.sdk.android.oss.model.DeleteObjectRequest;
import com.alibaba.sdk.android.oss.model.DeleteObjectResult;
import com.alibaba.sdk.android.oss.model.OSSRequest;
import com.alibaba.sdk.android.oss.model.PutObjectRequest;
import com.alibaba.sdk.android.oss.model.PutObjectResult;
import com.alibaba.sdk.android.oss.model.ResumableUploadRequest;
import com.alibaba.sdk.android.oss.model.ResumableUploadResult;
import com.ztsc.commonutils.RandomUntil;
import com.ztsc.commonutils.logcat.LogUtil;
import com.ztsc.house.application.MApplication;
import com.ztsc.house.application.MApplicationInfo;
import java.io.File;
import java.util.ArrayList;
/**
* Created by benchengzhou on 2019/2/14 11:26 .
* 作者邮箱: [email protected]
* 功能描述: 阿里云对象服务测试
* 类 名: OssService
* 备 注:
*/
public class OssService {
private OSSClient mOss;
private String mBucket;
private Handler mDelivery;
/**
*
* @param oss oss实例对象
* @param bucket bucket源存储空间
*/
public OssService(OSSClient oss, String bucket) {
this.mOss = oss;
this.mBucket = bucket;
mDelivery = new Handler(Looper.getMainLooper());
}
//获取主线程的调度
public Handler getDelivery() {
return mDelivery;
}
/**
* 获取指定阿里oss的bucket中时候是否存在对应名称的文件对象
*
* @param objectKey 对象在阿里服务器的存储路径
* @return true 文件已存在
*/
public boolean isObjectExit(String objectKey) {
boolean fileExist = false;
try {
if (mOss.doesObjectExist(mBucket, objectKey)) {
Log.d("doesObjectExist", "object exist.");
fileExist = true;
} else {
Log.d("doesObjectExist", "object does not exist.");
}
} catch (ClientException e) {
// 本地异常如网络异常等
e.printStackTrace();
} catch (ServiceException e) {
// 服务异常
Log.e("ErrorCode", e.getErrorCode());
Log.e("RequestId", e.getRequestId());
Log.e("HostId", e.getHostId());
Log.e("RawMessage", e.getRawMessage());
}
return fileExist;
}
/**
* 常规单个文件上传,请注意如果文件过大(相对网速考虑),请考虑使用
*
* @param filePath 本地文件存储路径
* @param imageUpLoadCallback 回调
* @param errRetry 出错重试的最多次数
*/
public void upLoadSigleFile(String filePath, ImageUpLoadCallback imageUpLoadCallback, boolean errRetry) {
//开始
if (imageUpLoadCallback != null) {
mDelivery.post(new Runnable() {
@Override
public void run() {
imageUpLoadCallback.onStart();
}
});
}
if (TextUtils.isEmpty(filePath) || !new File(filePath).exists()) {
LogUtil.e("文件_" + filePath + ":文件不存在");
if (imageUpLoadCallback != null) {
mDelivery.post(new Runnable() {
@Override
public void run() {
imageUpLoadCallback.onFinish();
}
});
}
return;
}
File file = new File(filePath);
long fileTotalSize = file.length();
String tempFileName = "zt_" + System.currentTimeMillis() + "_" + RandomUntil.getNumLargeSmallLetter(5) + "_" + file.getName();
// 构造上传请求。
PutObjectRequest put = new PutObjectRequest(mBucket, tempFileName, file.getAbsolutePath());
put.setCRC64(OSSRequest.CRC64Config.YES);
// 异步上传时可以设置进度回调。
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
@Override
public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
//计算当前大小
if (imageUpLoadCallback != null) {
mDelivery.post(new Runnable() {
@Override
public void run() {
imageUpLoadCallback.onProgress(currentSize, fileTotalSize);
}
});
}
}
});
OSSAsyncTask task = MApplicationInfo.getInstance().getOss().asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
@Override
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
Log.d("PutObject", "UploadSuccess");
Log.d("ETag", result.getETag());
Log.d("RequestId", result.getRequestId());
if (imageUpLoadCallback != null) {
ArrayList<String> imgUrl = new ArrayList<>();
String url = mOss.presignPublicObjectURL(mBucket, tempFileName);
imgUrl.add(url);
mDelivery.post(new Runnable() {
@Override
public void run() {
imageUpLoadCallback.onFinish();
imageUpLoadCallback.onSuccess(imgUrl);
}
});
}
}
@Override
public void onFailure(PutObjectRequest request, ClientException
clientExcepion, ServiceException serviceException) {
// 请求异常。
if (clientExcepion != null) {
// 本地异常,如网络异常等。
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// 服务异常。
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("Req
OssService代码
最新推荐文章于 2023-06-29 14:45:18 发布