修改名称。
This commit is contained in:
@@ -0,0 +1,312 @@
|
||||
package com.xscm.moduleutil.utils.oss;
|
||||
|
||||
import com.alibaba.sdk.android.oss.ClientConfiguration;
|
||||
import com.alibaba.sdk.android.oss.ClientException;
|
||||
import com.alibaba.sdk.android.oss.OSS;
|
||||
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.common.OSSLog;
|
||||
import com.alibaba.sdk.android.oss.common.auth.OSSCredentialProvider;
|
||||
import com.alibaba.sdk.android.oss.common.auth.OSSPlainTextAKSKCredentialProvider;
|
||||
import com.alibaba.sdk.android.oss.internal.OSSAsyncTask;
|
||||
import com.alibaba.sdk.android.oss.model.PutObjectRequest;
|
||||
import com.alibaba.sdk.android.oss.model.PutObjectResult;
|
||||
import com.blankj.utilcode.util.FileUtils;
|
||||
import com.blankj.utilcode.util.ThreadUtils;
|
||||
import com.xscm.moduleutil.base.CommonAppContext;
|
||||
import com.xscm.moduleutil.utils.Md5Utils;
|
||||
import com.xscm.moduleutil.utils.logger.Logger;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
|
||||
/**
|
||||
* Created by zjh on 2016/2/22.
|
||||
*/
|
||||
public class OSSOperUtils {
|
||||
private static OSS oss;
|
||||
private static OSSOperUtils utils;
|
||||
|
||||
/**
|
||||
* GetObjectRequest get = new GetObjectRequest("duia-log", name);
|
||||
* <p>
|
||||
* String endpoint = "https://oss-cn-beijing.aliyuncs.com";
|
||||
* <p>
|
||||
* // 明文设置secret的方式建议只在测试时使用,更多鉴权模式请参考后面的`访问控制`章节
|
||||
* OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider("qgR150FXSbdnCi5e", "wi4jUJvFgKZXkPp63vCY8nA849GpLT");
|
||||
* <p>
|
||||
* OSS
|
||||
* Access Key ID: LTAIdLLZpWaeXb6j
|
||||
* Access Key Secret: rBUwiyKNk8ddRaJMDYBucrTrxIidgr
|
||||
* AliYunOSSURLFile: zholiao.oss-cn-shenzhen.aliyuncs.com
|
||||
*/
|
||||
|
||||
|
||||
// 运行sample前需要配置以下字段为有效的值
|
||||
private static final String endpoint = CommonAppContext.getInstance().getCurrentEnvironment().getOssEndPoint();
|
||||
private static final String accessKeyId = CommonAppContext.getInstance().getCurrentEnvironment().getOssaAcessKeyId();
|
||||
private static final String accessKeySecret = CommonAppContext.getInstance().getCurrentEnvironment().getOssAccessKeySecret();
|
||||
private static final String bucketName = CommonAppContext.getInstance().getCurrentEnvironment().getOssBucketName();
|
||||
public static final String AliYunOSSURLFile = CommonAppContext.getInstance().getCurrentEnvironment().getOssBaseUrl();
|
||||
public static final String img = "images/android_images/";
|
||||
public static final String video = "video/";
|
||||
public static final String audio = "audio/";
|
||||
|
||||
|
||||
/**
|
||||
* 文件
|
||||
*
|
||||
* @param file
|
||||
* @param type 0 图片 1音频 2视频
|
||||
* @return
|
||||
*/
|
||||
public static String getPath(File file, int type) {
|
||||
String fileMD5 = Md5Utils.getFileMD5(file);
|
||||
String suffix = "";
|
||||
if (file.getName().contains(".")) {
|
||||
suffix = file.getName().substring(file.getName().lastIndexOf("."));
|
||||
}
|
||||
// if (type == 0) {
|
||||
return img + fileMD5 + suffix;
|
||||
// } else if (type == 1) {
|
||||
// return audio + fileMD5 + suffix;
|
||||
// } else {
|
||||
// return video + fileMD5 + suffix;
|
||||
// }
|
||||
}
|
||||
|
||||
public static OSSOperUtils newInstance() {
|
||||
if (null == utils) {
|
||||
utils = new OSSOperUtils();
|
||||
}
|
||||
if (null == oss) {
|
||||
OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(accessKeyId, accessKeySecret);
|
||||
ClientConfiguration conf = new ClientConfiguration();
|
||||
conf.setConnectionTimeout(150 * 1000); // 连接超时,默认15秒
|
||||
conf.setSocketTimeout(150 * 1000); // socket超时,默认15秒
|
||||
conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
|
||||
conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
|
||||
OSSLog.enableLog();
|
||||
oss = new OSSClient(CommonAppContext.getInstance(), endpoint, credentialProvider, conf);
|
||||
}
|
||||
return utils;
|
||||
}
|
||||
|
||||
//上传
|
||||
public OSSAsyncTask putObjectMethod(String uploadObject, String uploadFilePath, OssCallback ossCallback) {
|
||||
PutObjectSamples put = new PutObjectSamples(oss, bucketName, uploadObject, uploadFilePath);
|
||||
return put.asyncPutObjectFromLocalFile(new OSSProgressCallback<PutObjectRequest>() {
|
||||
@Override
|
||||
public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
|
||||
|
||||
}
|
||||
}, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
|
||||
@Override
|
||||
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
|
||||
ThreadUtils.runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (ossCallback != null) {
|
||||
ossCallback.onSuccess();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(PutObjectRequest request, ClientException clientException, ServiceException serviceException) {
|
||||
ThreadUtils.runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (ossCallback != null) {
|
||||
ossCallback.onFail();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//上传
|
||||
public OSSAsyncTask putObjectMethod(String uploadObject, String uploadFilePath, OSSProgressCallback mossProgressCallback, OSSCompletedCallback mcompletedCallback) {
|
||||
PutObjectSamples put = new PutObjectSamples(oss, bucketName, uploadObject, uploadFilePath);
|
||||
return put.asyncPutObjectFromLocalFile(mossProgressCallback, mcompletedCallback);
|
||||
}
|
||||
|
||||
//判断文件是否存在
|
||||
public String fileExist(String fileName) {
|
||||
try {
|
||||
boolean exist = oss.doesObjectExist(bucketName, fileName);
|
||||
Logger.e(bucketName, fileName, exist);
|
||||
if (exist) {
|
||||
//加个参数去缓存
|
||||
return String.format("%s/%s?v=1", AliYunOSSURLFile, fileName);
|
||||
}
|
||||
} catch (ClientException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ServiceException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public interface OssCallback {
|
||||
void onSuccess();
|
||||
|
||||
void onFail();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 发布动态上传图片或者视频
|
||||
*
|
||||
* @param file
|
||||
* @param type 0 img 1 audio 2 video
|
||||
*/
|
||||
public void uploadImageOrVideo(File file, int type, UploadCallback uploadCallback) {
|
||||
uploadCallback.startUpload();
|
||||
String objectKey = getPath(file, type);
|
||||
long size;
|
||||
size = FileUtils.getFileLength(file.getPath());
|
||||
if (-1 == size) { //文件不存在
|
||||
uploadCallback.uploadFailed();
|
||||
return;
|
||||
}
|
||||
boolean exist;
|
||||
try {
|
||||
exist = oss.doesObjectExist(bucketName, objectKey);
|
||||
String format = String.format("%s%s", AliYunOSSURLFile, objectKey);
|
||||
|
||||
if (false) { //Oss服务器文件存在
|
||||
uploadCallback.onProgress(size, size);
|
||||
uploadCallback.uploadEnd(format);
|
||||
} else { //文件不存在
|
||||
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectKey, file.getAbsolutePath());
|
||||
putObjectRequest.setProgressCallback((request, currentSize, totalSize) -> {
|
||||
ThreadUtils.runOnUiThread(() -> uploadCallback.onProgress(currentSize, totalSize));
|
||||
});
|
||||
oss.asyncPutObject(putObjectRequest, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
|
||||
@Override
|
||||
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
|
||||
ThreadUtils.runOnUiThread(() -> uploadCallback.uploadEnd(format));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(PutObjectRequest request, ClientException clientException, ServiceException serviceException) {
|
||||
ThreadUtils.runOnUiThread(uploadCallback::uploadFailed);
|
||||
clientException.printStackTrace();
|
||||
serviceException.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (ClientException | ServiceException e) {
|
||||
e.printStackTrace();
|
||||
uploadCallback.uploadFailed();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发布动态上传图片或者视频
|
||||
*
|
||||
* @param file
|
||||
* @param type 0 img 1 audio 2 video
|
||||
*/
|
||||
public String uploadImageOrVideo(File file, int type) {
|
||||
String objectKey = getPath(file, type);
|
||||
long size;
|
||||
size = FileUtils.getFileLength(file.getPath());
|
||||
if (-1 == size) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectKey, file.getAbsolutePath());
|
||||
putObjectRequest.setProgressCallback((request, currentSize, totalSize) -> {});
|
||||
oss.putObject(putObjectRequest);
|
||||
return String.format("%s%s", AliYunOSSURLFile, objectKey);
|
||||
} catch (ClientException | ServiceException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发布动态上传封面用
|
||||
*
|
||||
* @param bytes
|
||||
* @param uploadCallback
|
||||
*/
|
||||
public void uploadBitmap(byte[] bytes, UploadCallback uploadCallback) {
|
||||
uploadCallback.startUpload();
|
||||
int size = bytes.length;
|
||||
String md5 = Md5Utils.getMD5String(bytes);
|
||||
String objectKey = img + md5 + ".jpg";
|
||||
boolean exist;
|
||||
try {
|
||||
exist = oss.doesObjectExist(bucketName, objectKey);
|
||||
String format = String.format("%s%s", AliYunOSSURLFile, objectKey);
|
||||
|
||||
if (false) { //Oss服务器文件存在
|
||||
uploadCallback.onProgress(size, size);
|
||||
uploadCallback.uploadEnd(format);
|
||||
} else { //文件不存在
|
||||
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectKey, bytes);
|
||||
putObjectRequest.setProgressCallback((request, currentSize, totalSize) -> {
|
||||
ThreadUtils.runOnUiThread(() -> uploadCallback.onProgress(currentSize, totalSize));
|
||||
});
|
||||
oss.asyncPutObject(putObjectRequest, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
|
||||
@Override
|
||||
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
|
||||
ThreadUtils.runOnUiThread(() -> uploadCallback.uploadEnd(format));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(PutObjectRequest request, ClientException clientException, ServiceException serviceException) {
|
||||
ThreadUtils.runOnUiThread(uploadCallback::uploadFailed);
|
||||
clientException.printStackTrace();
|
||||
serviceException.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
} catch (ClientException | ServiceException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发布动态上传封面用
|
||||
*
|
||||
* @param bytes
|
||||
*/
|
||||
public String uploadBitmap(byte[] bytes) {
|
||||
String md5 = Md5Utils.getMD5String(bytes);
|
||||
String objectKey = img + md5 + ".jpg";
|
||||
try {
|
||||
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectKey, bytes);
|
||||
putObjectRequest.setProgressCallback((request, currentSize, totalSize) -> {
|
||||
});
|
||||
oss.putObject(putObjectRequest);
|
||||
return String.format("%s%s", AliYunOSSURLFile, objectKey);
|
||||
} catch (ClientException | ServiceException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传进度条回调
|
||||
*/
|
||||
public interface UploadCallback {
|
||||
|
||||
void startUpload();
|
||||
|
||||
void onProgress(long currentSize, long totalSize);
|
||||
|
||||
void uploadEnd(String url);
|
||||
|
||||
void uploadFailed();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package com.xscm.moduleutil.utils.oss;
|
||||
|
||||
import com.alibaba.sdk.android.oss.ClientException;
|
||||
import com.alibaba.sdk.android.oss.OSS;
|
||||
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.PutObjectRequest;
|
||||
import com.alibaba.sdk.android.oss.model.PutObjectResult;
|
||||
|
||||
/**
|
||||
* Created by zhouzhuo on 12/3/15.
|
||||
*/
|
||||
public class PutObjectSamples {
|
||||
|
||||
private OSS oss;
|
||||
private String testBucket;
|
||||
private String testObject;
|
||||
private String uploadFilePath;
|
||||
|
||||
|
||||
public PutObjectSamples(OSS client, String testBucket, String testObject, String uploadFilePath) {
|
||||
this.oss = client;
|
||||
this.testBucket = testBucket;
|
||||
this.testObject = testObject;
|
||||
this.uploadFilePath = uploadFilePath;
|
||||
}
|
||||
|
||||
// 从本地文件上传,使用非阻塞的异步接口
|
||||
public OSSAsyncTask asyncPutObjectFromLocalFile(final OSSProgressCallback<PutObjectRequest> mossProgressCallback, final OSSCompletedCallback<PutObjectRequest, PutObjectResult> mcompletedCallback) {
|
||||
// 构造上传请求
|
||||
PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath);
|
||||
|
||||
// 异步上传时可以设置进度回调
|
||||
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
|
||||
@Override
|
||||
public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
|
||||
if (mossProgressCallback != null) {
|
||||
mossProgressCallback.onProgress(request, currentSize, totalSize);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
|
||||
@Override
|
||||
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
|
||||
if (mcompletedCallback != null) {
|
||||
mcompletedCallback.onSuccess(request, result);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
|
||||
// 请求异常
|
||||
if (clientExcepion != null) {
|
||||
// 本地异常如网络异常等
|
||||
clientExcepion.printStackTrace();
|
||||
}
|
||||
if (mcompletedCallback != null) {
|
||||
mcompletedCallback.onFailure(request, clientExcepion, serviceException);
|
||||
}
|
||||
}
|
||||
});
|
||||
return task;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user