package com.tengxunyun; import android.content.Context; import android.util.Log; import com.tencent.cos.COSClient; import com.tencent.cos.COSClientConfig; import com.tencent.cos.COSConfig; import com.tencent.cos.common.COSEndPoint; import com.tencent.cos.model.COSRequest; import com.tencent.cos.model.COSResult; import com.tencent.cos.model.CreateDirRequest; import com.tencent.cos.model.CreateDirResult; import com.tencent.cos.model.DeleteObjectRequest; import com.tencent.cos.model.DeleteObjectResult; import com.tencent.cos.model.GetObjectMetadataRequest; import com.tencent.cos.model.GetObjectMetadataResult; import com.tencent.cos.model.GetObjectRequest; import com.tencent.cos.model.PutObjectRequest; import com.tencent.cos.model.PutObjectResult; import com.tencent.cos.task.listener.ICmdTaskListener; import com.tencent.cos.task.listener.IDownloadTaskListener; import com.tencent.cos.task.listener.IUploadTaskListener; import com.tengxunyun.config.ParamPreference; import com.tengxunyun.utils.TencentUtils; import java.io.File; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created:yangjiang on 2016/11/10 17:48 * E-Mail:1007181167@qq.com * Description: 阿里文件工具类 */ public final class OSSService { private COSClient client; private volatile static OSSService ossService; private static final String TAG = "OSSService"; private boolean isDebug = false; private String cosPath; /** * cos sdk 配置设置; 根据需要设置 */ // 创建单例getInstance public static OSSService getInstance() { if (ossService == null) { synchronized (OSSService.class) { ossService = new OSSService(); } } return ossService; } /*** * 初始化方式 * * @param context 上下 ***/ public void init(Context context) { synchronized (this) { getOSSClient(context); } } /**** * d获取 ***/ private COSClient getOSSClient(Context context) { if (client == null) { //持久化 ID,每个 COSClient 需设置一个唯一的 ID 用于持久化保存未完成任务 列表 // ,以便应用退出重进后能够继续进行上传;传入为 Null,则不会进行持久化保存 String persistenceId = "AKIDumXZVFgLkAQWQ7O8f084oQq46UilgHlF"; //创建COSClientConfig对象,根据需要修改默认的配置参数 COSClientConfig config = new COSClientConfig(); config.setEndPoint(COSEndPoint.COS_TJ); client = new COSClient(context, ParamPreference.TENCENT_COS_APPID, config, persistenceId); } return client; } public COSClient getOSSClient() { return client; } /** * 获取Bucket名 称 ***/ public String getBucket() { return ParamPreference.TENCENT_COS_BUCKET; } /*** * 创建目录 ***/ public void creareDir() { CreateDirRequest createDirRequest = new CreateDirRequest(); createDirRequest.setBucket(getBucket()); createDirRequest.setCosPath(cosPath); Log.d(TAG, TencentUtils.getTencentSign()); createDirRequest.setSign(TencentUtils.getTencentSign()); createDirRequest.setListener(new ICmdTaskListener() { public void onSuccess(COSRequest cosRequest, COSResult cosResult) { final CreateDirResult createDirResult = (CreateDirResult) cosResult; Log.w(TAG, "目录创建成功: ret=" + createDirResult.code + "; msg=" + createDirResult.msg + "ctime = " + createDirResult.ctime); } @Override public void onFailed(COSRequest COSRequest, final COSResult cosResult) { Log.w(TAG, "目录创建失败: ret=" + cosResult.code + "; msg=" + cosResult.msg); } }); getOSSClient().createDirAsyn(createDirRequest); } /*** * 上传文件 * * @param path 文件本地路径 * @param fileKey 自己定义在oss的文件fileKey * @return boolean true 上传成功 **/ public PutObjectResult uploadFile(String path, String fileKey) { // 构造上传请求 PutObjectRequest putObjectRequest = new PutObjectRequest(); putObjectRequest.setBucket(getBucket()); putObjectRequest.setCosPath(cosPath + "/" + fileKey); putObjectRequest.setSrcPath(path); putObjectRequest.setSign(TencentUtils.getTencentSign()); return getOSSClient().putObject(putObjectRequest); } /*** * 上传文件 * * @param path 文件本地路径 * @param fileKey 自己定义在oss的文件fileKey * @param iUploadTaskListener 上传进度回调 * @return OSSAsyncTask 异步任务 **/ public void uploadFileAsyn(String path, String fileKey, IUploadTaskListener iUploadTaskListener) { PutObjectRequest putObjectRequest = new PutObjectRequest(); putObjectRequest.setBucket(getBucket()); putObjectRequest.setCosPath(cosPath + '/' + fileKey); putObjectRequest.setSrcPath(path); putObjectRequest.setSign(TencentUtils.getTencentSign()); //设置是否允许覆盖同名文件: "0",允许覆盖;"1",不允许覆盖; putObjectRequest.setInsertOnly("1"); //设置是否开启分片上传 putObjectRequest.setSliceFlag(true);//设置是否分片上传:true,分片上传;false,简单文件上传 putObjectRequest.setSlice_size(1024 * 1024);//分片上传时,分片的大小 // putObjectRequest.setListener(new IUploadTaskListener() { // @Override // public void onSuccess(COSRequest cosRequest, COSResult cosResult) { // // PutObjectResult result = (PutObjectResult) cosResult; // StringBuilder stringBuilder = new StringBuilder(); // stringBuilder.append(" 上传结果: ret=" + result.code + "; msg =" + result.msg + "\n"); // stringBuilder.append(" access_url= " + result.access_url + "\n"); // stringBuilder.append(" resource_path= " + result.resource_path + "\n"); // stringBuilder.append(" url= "result.url); // Log.w("TEST", stringBuilder.toString(); // } // // @Override // public void onFailed(COSRequest COSRequest, final COSResult cosResult) { // Log.w("TEST", "上传出错: ret =" + cosResult.code + "; msg =" + cosResult.msg); // } // // @Override // public void onProgress(COSRequest cosRequest, final long currentSize, final long totalSize) { // float progress = (float) currentSize / totalSize; // progress = progress * 100; // Log.w("TEST", "进度: " + (int) progress + "%"); // } // }); putObjectRequest.setListener(iUploadTaskListener); getOSSClient().putObjectAsyn(putObjectRequest); } /** * 获取文件信息 ***/ public GetObjectMetadataResult getObjectInfo(String fileKey) { // 创建同步获取文件元信息请求 GetObjectMetadataRequest getObjectMetadataRequest = new GetObjectMetadataRequest(); getObjectMetadataRequest.setBucket(getBucket()); getObjectMetadataRequest.setCosPath(cosPath + "/" + fileKey); getObjectMetadataRequest.setSign(TencentUtils.getTencentSign()); return getOSSClient().getObjectMetadata(getObjectMetadataRequest); } /** * 获取文件信息 * * @param fileKey 文件key ***/ public void getObjectInfoAsyn(String fileKey, ICmdTaskListener iCmdTaskListener) { // 创建同步获取文件元信息请求 GetObjectMetadataRequest getObjectMetadataRequest = new GetObjectMetadataRequest(); getObjectMetadataRequest.setBucket(getBucket()); getObjectMetadataRequest.setCosPath(cosPath + "/" + fileKey); getObjectMetadataRequest.setSign(TencentUtils.getTencentSign()); getObjectMetadataRequest.setListener(iCmdTaskListener); // getObjectMetadataRequest.setListener(new ICmdTaskListener() { // @Override // public void onSuccess(COSRequest cosRequest, COSResult cosResult) { // GetObjectMetadataResult result = (GetObjectMetadataResult) cosResult; // StringBuilder stringBuilder = new StringBuilder(); // stringBuilder.append("code=" + result.code + "; msg=" +result.msg + "\n"); // stringBuilder.append("ctime =" +result.ctime + "; mtime=" +result.mtime + "\n" ); // stringBuilder.append("biz_attr=" + result.biz_attr == null ? "" : result.biz_attr ); // stringBuilder.append("sha=" + result.sha); // Log.w("TEST",stringBuilder.toString()); // } // // @Override // public void onFailed(COSRequest cosRequest, final COSResult cosResult) { // Log.w("TEST", cosResult.code+" : "+cosResult.msg); // } // // }); getOSSClient().getObjectMetadataAsyn(getObjectMetadataRequest); } /**** * 刪除文件 * * @param key 刪除文件key * @return boolean ***/ public boolean deleteFile(String key) { try { DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(); deleteObjectRequest.setBucket(getBucket()); deleteObjectRequest.setCosPath(key); deleteObjectRequest.setSign(TencentUtils.getTencentSign()); DeleteObjectResult result = getOSSClient().deleteObject(deleteObjectRequest); return result.code == 200; } catch (Exception e) { return false; } } /**** * 刪除文件 * * @param key 刪除文件key * @param iCmdTaskListener 删除文件回调 ***/ public void deleteFileAsync(String key, ICmdTaskListener iCmdTaskListener) { // 创建删除请求 DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(); deleteObjectRequest.setBucket(getBucket()); deleteObjectRequest.setCosPath(key); deleteObjectRequest.setSign(TencentUtils.getTencentSign()); deleteObjectRequest.setListener(iCmdTaskListener); // deleteObjectRequest.setListener(new ICmdTaskListener() { // @Override // public void onSuccess(COSRequest cosRequest, COSResult cosResult) { // Log.w("TEST", cosResult.code+" : "+cosResult.msg); // } // // @Override // public void onFailed(COSRequest COSRequest, COSResult cosResult) { // Log.w("TEST", cosResult.code+" : "+cosResult.msg); // } // }); getOSSClient().deleteObjectAsyn(deleteObjectRequest); } /***** * 下载文件 * * @param downloadURl 下载路径 * @param savePath 保存文件路径 *****/ public void fileDownAsync(String downloadURl, String savePath, IDownloadTaskListener iDownloadTaskListener) { GetObjectRequest getObjectRequest = new GetObjectRequest(downloadURl, savePath); getObjectRequest.setSign(null); getObjectRequest.setListener(iDownloadTaskListener); // getObjectRequest.setListener(new IDownloadTaskListener() { // @Override // public void onProgress(COSRequest cosRequest, final long currentSize, final long totalSize) { // float progress = currentSize / (float) totalSize; // progress = progress * 100; // progressText.setText("progress =" + (int) (progress) + "%"); // Log.w("TEST", "progress =" + (int) (progress) + "%"); // } // // @Override // public void onSuccess(COSRequest cosRequest, COSResult cosResult) { // Log.w("TEST", "code =" + cosResult.code + "; msg =" + cosResult.msg); // } // // @Override // public void onFailed(COSRequest COSRequest, COSResult cosResult) { // Log.w("TEST", "code =" + cosResult.code + "; msg =" + cosResult.msg); // } // }); getOSSClient().getObjectAsyn(getObjectRequest); } /**** * @param fileKey 文件key * @return String 文件路徑 ***/ public String getOSSFile(String fileKey) { if (fileKey != null && (isHttp(fileKey) || fileKey.contains("file://") || fileKey.contains("content://") || fileKey.contains("drawable://")) || new File(fileKey).exists() ) { return fileKey; } else { return getOssObjecttUrl() + fileKey; } } /*** * 域名管理 **/ private String getOssObjecttUrl() { return "yangjiang-1251471829.costj.myqcloud.com"; } /** * 判断url是否为网址 * * @param url * @return URL 链接 */ private static boolean isHttp(String url) { if (null == url) return false; String regex = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(url); return matcher.matches(); } }