|
@@ -0,0 +1,179 @@
|
|
|
+package com.cooleshow.base.utils.helper.upload;
|
|
|
+
|
|
|
+import android.app.Activity;
|
|
|
+
|
|
|
+import com.cooleshow.base.bean.UploadTokenInfoBean;
|
|
|
+import com.cooleshow.base.data.api.UploadApi;
|
|
|
+import com.cooleshow.base.data.net.BaseResponse;
|
|
|
+import com.cooleshow.base.data.net.RetrofitFactory;
|
|
|
+import com.cooleshow.base.utils.FileUtils;
|
|
|
+import com.cooleshow.base.utils.LogUtils;
|
|
|
+import com.cooleshow.base.utils.RequestBodyUtil;
|
|
|
+import com.ksyun.ks3.auth.AuthUtils;
|
|
|
+import com.ksyun.ks3.exception.Ks3Error;
|
|
|
+import com.ksyun.ks3.model.PostObjectFormFields;
|
|
|
+import com.ksyun.ks3.model.acl.Authorization;
|
|
|
+import com.ksyun.ks3.model.acl.CannedAccessControlList;
|
|
|
+import com.ksyun.ks3.services.AuthListener;
|
|
|
+import com.ksyun.ks3.services.Ks3Client;
|
|
|
+import com.ksyun.ks3.services.Ks3ClientConfiguration;
|
|
|
+import com.ksyun.ks3.services.handler.CreateBucketResponceHandler;
|
|
|
+import com.ksyun.ks3.services.handler.Ks3HttpResponceHandler;
|
|
|
+import com.ksyun.ks3.services.handler.PutObjectResponseHandler;
|
|
|
+import com.ksyun.ks3.services.request.PutObjectRequest;
|
|
|
+import com.ksyun.ks3.services.request.object.PostObjectRequest;
|
|
|
+import com.ksyun.ks3.util.Constants;
|
|
|
+
|
|
|
+import org.json.JSONArray;
|
|
|
+import org.json.JSONException;
|
|
|
+import org.json.JSONObject;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+import java.security.SignatureException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+import cz.msebera.android.httpclient.Header;
|
|
|
+import cz.msebera.android.httpclient.conn.ssl.SSLSocketFactory;
|
|
|
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
|
|
+import io.reactivex.rxjava3.annotations.NonNull;
|
|
|
+import io.reactivex.rxjava3.core.Observable;
|
|
|
+import io.reactivex.rxjava3.core.ObservableEmitter;
|
|
|
+import io.reactivex.rxjava3.core.ObservableOnSubscribe;
|
|
|
+import io.reactivex.rxjava3.core.Observer;
|
|
|
+import io.reactivex.rxjava3.disposables.Disposable;
|
|
|
+import io.reactivex.rxjava3.schedulers.Schedulers;
|
|
|
+import okhttp3.RequestBody;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Author by pq, Date on 2022/5/11.
|
|
|
+ */
|
|
|
+public class UploadHelper {
|
|
|
+ public static final String SRC_BUCKETNAME = "daya";
|
|
|
+ public static final String SRC_OBJECTKEY = "";
|
|
|
+ public static final String DST_BUCKETNAME = "";
|
|
|
+ public static final String ak = "AKLTtTeIbadpRG-pil4S0Q4m-Q";
|
|
|
+ public static final String sk = "OB1HmNOfDNW95wHoxMkP6IPFZXormk2ngA800TkvKAw7ozhiJGRqrMnnV8ZrAU3WRQ==";
|
|
|
+ public Activity mActivity;
|
|
|
+ private Ks3Client mClient;
|
|
|
+
|
|
|
+ private String uploadToken = "";
|
|
|
+
|
|
|
+ public UploadHelper(Activity activity) {
|
|
|
+ this.mActivity = activity;
|
|
|
+ initClient();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void initClient() {
|
|
|
+ Ks3ClientConfiguration configuration = Ks3ClientConfiguration.getDefaultConfiguration();
|
|
|
+ configuration.setSSLSocketFactory(SSLSocketFactory.getSocketFactory());
|
|
|
+ configuration.setDomainMode(true);
|
|
|
+ configuration.setPathStyleAccess(true);
|
|
|
+ configuration.setProtocol(Ks3ClientConfiguration.PROTOCOL.https);
|
|
|
+ mClient = new Ks3Client(new AuthListener() {
|
|
|
+ @Override
|
|
|
+ public String onCalculateAuth(final String httpMethod,
|
|
|
+ final String ContentType, final String Date,
|
|
|
+ final String ContentMD5, final String Resource,
|
|
|
+ final String Headers) {
|
|
|
+ String token = "";
|
|
|
+ try {
|
|
|
+ token = AuthUtils.calcAuthToken(httpMethod, ContentType, Date, ContentMD5, Resource, Headers, ak, sk);
|
|
|
+ LogUtils.i("pq", "token:" + token);
|
|
|
+ } catch (SignatureException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return token;
|
|
|
+ }
|
|
|
+ }, configuration, mActivity.getApplicationContext());
|
|
|
+ mClient.setEndpoint("ks3-cn-beijing.ksyuncs.com");
|
|
|
+ }
|
|
|
+
|
|
|
+ public void uploadFile(File file) {
|
|
|
+ if (!file.exists()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String name = FileUtils.getFileName(file) + System.currentTimeMillis();
|
|
|
+ String key = "androidtest/" + name;
|
|
|
+ getUploadToken(name, key, file);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void doUpload(String key, File file) {
|
|
|
+ PutObjectRequest putObjectRequest = new PutObjectRequest("daya", key, file);
|
|
|
+ putObjectRequest.setCannedAcl(CannedAccessControlList.PublicRead);
|
|
|
+ mClient.putObject(putObjectRequest, new PutObjectResponseHandler() {
|
|
|
+ @Override
|
|
|
+ public void onTaskFailure(int i, Ks3Error ks3Error, Header[] headers, String s, Throwable throwable) {
|
|
|
+ LogUtils.i("pq", "onFailure postObject is " + s);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onTaskSuccess(int i, Header[] headers) {
|
|
|
+ LogUtils.i("pq", "onSuccess postObject is " + i);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onTaskStart() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onTaskFinish() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onTaskCancel() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onTaskProgress(double v) {
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private void getUploadToken(String fileName, String key, File file) {
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ try {
|
|
|
+ JSONObject postDataJson = new JSONObject();
|
|
|
+ postDataJson.put("acl", CannedAccessControlList.PublicRead);
|
|
|
+ postDataJson.put("key", key);
|
|
|
+ jsonObject.putOpt("filename", fileName);
|
|
|
+ jsonObject.putOpt("postData", postDataJson);
|
|
|
+ } catch (JSONException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ RequestBody body = RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString());
|
|
|
+
|
|
|
+ UploadApi uploadApi = RetrofitFactory.Companion.getInstance().create(UploadApi.class);
|
|
|
+ uploadApi.getUploadTokenForTeacher(body).subscribeOn(Schedulers.io())
|
|
|
+ .observeOn(AndroidSchedulers.mainThread())
|
|
|
+ .subscribe(new Observer<BaseResponse<UploadTokenInfoBean>>() {
|
|
|
+ @Override
|
|
|
+ public void onSubscribe(@NonNull Disposable d) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onNext(@NonNull BaseResponse<UploadTokenInfoBean> response) {
|
|
|
+ uploadToken = "KSS " + response.getData().kssAccessKeyId + ":" + response.getData().signature;
|
|
|
+ doUpload(key, file);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onError(@NonNull Throwable e) {
|
|
|
+ uploadToken = "";
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onComplete() {
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+}
|