android 上传oss 简单上传
/**
*endpoint
accessKeyId 阿里云自己申请的
accessKeySecret 阿里云自己申请的
token 后台生成
*/
public class OssManager extends BaseMvpActivity{
private OSS oss;
private UpLoadPhotoActivity mContext;
public static String objectKey;
public static OssManager getInstance() {
return OssInstance.instance;
}
@Override
public IPresenter createPresenter() {
return null;
}
private static class OssInstance {
private static final OssManager instance = new OssManager();
}
private OssManager() {
}
/**
* 初始化
**/
public OssManager init(Context context, String endpoint, String accessKeyId, String accessKeySecret, String token) {
mContext = (UpLoadPhotoActivity)context;
if (oss == null) {
LogUtils.e("TAG", "accessKeyId=" + accessKeyId);
LogUtils.e("TAG", "accessKeySecret=" + accessKeySecret);
LogUtils.e("TAG", "token=" + token);
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, token);
ClientConfiguration conf = new ClientConfiguration();
conf.setConnectionTimeout(15 * 1000); // 连接超时, 默认15秒
conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次
OSSClient ossClient = new OSSClient(context, endpoint, credentialProvider, conf);
oss = ossClient;
LogUtils.e("aaaaaa", "初始化完毕");
OSSLog.enableLog();
}
return OssInstance.instance;
}
/**
* 普通上传,比如image
**/
OSSAsyncTask task;
public void upload(String name, String filePath) {
mContext.showDialog();
// LogUtils.e("aaaaname", name + ":" + filePath);
// 指定数据类型,没有指定会自动根据后缀名判断
final ObjectMetadata objectMeta = new ObjectMetadata();
objectMeta.setContentType("image/jpeg");
// 构造上传请求
PutObjectRequest put = new PutObjectRequest("bucketName,上面有解释", name, filePath);
put.setMetadata(objectMeta);
// 异步上传时可以设置进度回调
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
@Override
public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
int progress = (int) (100 * currentSize / totalSize);
LogUtils.e("progress=====" + progress);
if (progress==100){
mContext.hideDialog();
}
}
});
OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
@Override
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
Log.d("PutObject", "UploadSuccess");
objectKey = request.getObjectKey();
LogUtils.e(objectKey);
Log.d("ETag", result.getETag());
Log.d("RequestId", result.getRequestId());
}
@Override
public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
LogUtils.e(clientExcepion.getMessage());
String info = "";
// 请求异常
if (clientExcepion != null) {
// 本地异常如网络异常等
clientExcepion.printStackTrace();
info = clientExcepion.toString();
LogUtils.e(info);
}
if (serviceException != null) {
// 服务异常
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
info = serviceException.toString();
}
}
});
}
public static String getImageUrl(){
return objectKey;
}
}
这里附一张图,解释 endpoint 跟 bucketName 一看就明白了
然后再activity foresult 调用
//这里的选择图片是个框架,你可以使用自己习惯用的
// objectKey 这个是我们规定的图片名字规则
List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
if (selectList.size() > 0) {
LocalMedia localMedia = selectList.get(0);
String path1 = localMedia.getPath();
File file = new File(path1);
String name = file.getName();
Glide.with(this).load(path1).into(ivId);
String objectKey = "此处就不显示了,文件目录" + "/" +
UserManager.getInstance().getUserInfo().getId() +
UUID.randomUUID().toString().replace("-", "")+"_front_" + name;
OssManager.getInstance().init(this, Constants.TEST, accessKeyId, accessKeySecret, securityToken);
OssManager.getInstance().upload(objectKey,path1);
String imageUrl = OssManager.getImageUrl();
if (!StringUtils.isEmpty(imageUrl)){
photo1 = baseUrl+imageUrl;
}else {
ToastUtils.showShort("上传失败,请重新上传");
}
}
随手做个记录,若有意见或建议,忘提出