123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- package com.fxy.common;
- import android.content.Context;
- import android.os.Handler;
- import android.os.Message;
- import com.elvishew.xlog.XLog;
- import com.fxy.BuildConfig;
- import com.fxy.constant.SPCache;
- import com.fxy.net.Urls;
- import com.tencent.cos.xml.CosXmlServiceConfig;
- import com.tencent.cos.xml.CosXmlSimpleService;
- import com.tencent.cos.xml.exception.CosXmlClientException;
- import com.tencent.cos.xml.exception.CosXmlServiceException;
- import com.tencent.cos.xml.listener.CosXmlProgressListener;
- import com.tencent.cos.xml.listener.CosXmlResultListener;
- import com.tencent.cos.xml.model.CosXmlRequest;
- import com.tencent.cos.xml.model.CosXmlResult;
- import com.tencent.cos.xml.transfer.COSXMLUploadTask;
- import com.tencent.cos.xml.transfer.TransferConfig;
- import com.tencent.cos.xml.transfer.TransferManager;
- import com.tencent.cos.xml.transfer.TransferState;
- import com.tencent.cos.xml.transfer.TransferStateListener;
- import com.tencent.qcloud.core.auth.QCloudCredentialProvider;
- import com.tencent.qcloud.core.auth.SessionCredentialProvider;
- import com.tencent.qcloud.core.http.HttpRequest;
- import java.net.MalformedURLException;
- import java.net.URL;
- public class CosService {
- private Context mContext;
- private String bucketName = "";
- private String path_prefix = "";
- // 存储桶所在地域简称,例如广州地区是 ap-guangzhou
- private String regionId = "";
- // 创建 CosXmlServiceConfig 对象,根据需要修改默认的配置参数
- private CosXmlServiceConfig serviceConfig ;
- // 初始化 COS Service,获取实例
- private CosXmlSimpleService cosXmlService ;
- private COSXMLUploadTask cosxmlUploadTask;
- public CosService(Context context,String prefix){
- mContext = context;
- SPCache spCache = SPCache.getInstance(mContext);
- String cosHost = spCache.getResourceHost();
- String resource_prefix = spCache.getResourcePrefix();
- //上传路径确保前缀
- if (!resource_prefix.contains(resource_prefix)){
- prefix = resource_prefix+prefix;
- }
- //zj-1304592070.cos.ap-singapore.myqcloud.com
- bucketName = spCache.getResourceBucket();
- regionId = spCache.getResourceRegion();
- path_prefix = prefix;
- creationCos();
- }
- public CosXmlSimpleService creationCos(){
- URL url = null; // 后台授权服务的 url 地址
- try {
- url = new URL(Urls.getServiceAddress(mContext)+ Urls.FMS_UPLOAD_SIGN);
- } catch (MalformedURLException e) {
- e.printStackTrace();
- }
- QCloudCredentialProvider credentialProvider = new SessionCredentialProvider(new HttpRequest.Builder<String>()
- .url(url)
- .method("GET")
- .addHeader("warehouse-id",SPCache.getInstance(mContext).getWareHouseId())
- .addHeader("version","999999")
- .addHeader("token",SPCache.getInstance(mContext).getToken())
- .encodedQuery("path_prefix",path_prefix+"*")
- .build());
- serviceConfig = new CosXmlServiceConfig.Builder()
- .setRegion(regionId)
- .isHttps(true) // 使用 HTTPS 请求, 默认为 HTTP 请求
- .builder();
- cosXmlService = new CosXmlSimpleService(mContext,serviceConfig, credentialProvider);
- return cosXmlService;
- }
- public void cosUpload(String filePath, String uploadName , int num, Handler handler){
- new CosThread(filePath, uploadName , num,handler).start();
- }
- //取消上传
- public void taskCancel(){
- if (cosxmlUploadTask!=null){
- boolean pauseSuccess = cosxmlUploadTask.pauseSafely();
- if (pauseSuccess){
- cosxmlUploadTask.cancel();
- }
- }
- }
- //腾讯云cos上传
- class CosThread extends Thread {
- private String urlPath = "";
- private String fileName = "";
- private int current = 0;
- private Handler uploadHandler ;
- // 若存在初始化分块上传的 UploadId,则赋值对应的 uploadId 值用于续传;否则,赋值 null
- private String uploadId = null;
- /**
- *
- * @param filePath 本地文件路径
- * @param uploadName 上传后文件名
- * @param num 序号
- */
- public CosThread(String filePath, String uploadName , int num, Handler handler) {
- urlPath = filePath;
- fileName = uploadName;
- current = num;
- uploadHandler = handler;
- }
- public void run() {
- // 初始化 TransferConfig,这里使用默认配置,如果需要定制,请参考 SDK 接口文档
- TransferConfig transferConfig = new TransferConfig.Builder().build();
- // 初始化 TransferManager
- TransferManager transferManager = new TransferManager(getCosXmlService(), transferConfig);
- String bucket = getBucketName(); //存储桶,格式:BucketName-APPID
- String cosPath = getCosPath()+fileName; //对象在存储桶中的位置标识符,即称对象键
- //String srcPath = new File(mContext.getCacheDir(), urlPath).toString(); //本地文件的绝对路径
- // 上传文件
- cosxmlUploadTask = transferManager.upload(bucket, cosPath,urlPath, uploadId);
- //设置上传进度回调
- cosxmlUploadTask.setCosXmlProgressListener(new CosXmlProgressListener() {
- @Override
- public void onProgress(long complete, long target) {
- // todo Do something to update progress...
- int progress = (int) ((double) complete / (double) target * 100);
- Message msg = new Message();
- msg.arg1 = progress;
- msg.what = 3;
- uploadHandler.sendMessage(msg);
- }
- });
- //设置返回结果回调
- cosxmlUploadTask.setCosXmlResultListener(new CosXmlResultListener() {
- @Override
- public void onSuccess(CosXmlRequest request, CosXmlResult result) {
- if (BuildConfig.DEBUG){
- XLog.e(result);
- }
- //COSXMLUploadTask.COSXMLUploadTaskResult cOSXMLUploadTaskResult = (COSXMLUploadTask.COSXMLUploadTaskResult) result;
- String[] accessUrlArr = result.accessUrl.split(".myqcloud.com");
- Message msg = new Message();
- msg.arg1 = current;
- msg.obj = accessUrlArr[1];
- msg.what = 2;
- uploadHandler.sendMessage(msg);
- }
- @Override
- public void onFail(CosXmlRequest request, CosXmlClientException clientException, CosXmlServiceException serviceException) {
- Message msg = new Message();
- msg.what = 1;
- if (clientException != null) {
- // 本地异常,如网络异常等。
- msg.obj = "网络异常,请稍后...";
- uploadHandler.sendMessage(msg);
- //clientException.printStackTrace();
- } else {
- msg.obj = "服务异常,请稍后...";
- uploadHandler.sendMessage(msg);
- //serviceException.printStackTrace();
- XLog.e("ErrorCode", serviceException.getErrorCode());
- XLog.e("RequestId", serviceException.getRequestId());
- XLog.e("tLocalizedMessage", serviceException.getLocalizedMessage());
- XLog.e("Message", serviceException.getMessage());
- }
- }
- });
- //设置任务状态回调, 可以查看任务过程
- cosxmlUploadTask.setTransferStateListener(new TransferStateListener() {
- @Override
- public void onStateChanged(TransferState state) {
- // todo notify transfer state
- if (BuildConfig.DEBUG){
- XLog.e(state);
- }
- Message msg = new Message();
- msg.arg1 = current;
- msg.obj = state;
- msg.what = 5;
- uploadHandler.sendMessage(msg);
- }
- });
- }
- }
- /**
- * 返回 cosXmlService
- * @return
- */
- public CosXmlSimpleService getCosXmlService(){
- return cosXmlService;
- }
- public String getBucketName(){
- return bucketName;
- }
- public String getCosPath(){
- return path_prefix;
- }
- }
|