123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- package com.taiyi.tyusbsdk;
- import android.content.Context;
- 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.OSSCustomSignerCredentialProvider;
- import com.alibaba.sdk.android.oss.common.utils.OSSUtils;
- import com.alibaba.sdk.android.oss.model.PutObjectRequest;
- import com.alibaba.sdk.android.oss.model.PutObjectResult;
- import com.taiyi.tyusbsdk.pulse.TaiyiConfig;
- import java.util.Objects;
- import okhttp3.Headers;
- import okhttp3.HttpUrl;
- import okhttp3.OkHttpClient;
- import okhttp3.Request;
- public class OssFileUtil {
- private static final ClientConfiguration config = new ClientConfiguration();
- private static OssFileUtil mUploadFileBiz;
- public static String bucketName = "taiyi";
- public static String endPoint = "https://oss-cn-beijing.aliyuncs.com";
- public static String target = endPoint.replaceFirst("^(https?://)oss-", "$1" + bucketName + ".oss-");
- public static OssFileUtil getInstance() {
- if (mUploadFileBiz == null) {
- mUploadFileBiz = new OssFileUtil();
- }
- return mUploadFileBiz;
- }
- static {
- config.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒。
- config.setSocketTimeout(15 * 1000); // socket超时,默认15秒。
- config.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个。
- config.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次。
- }
- public static void setProxy(TaiyiConfig.OSSAgency agency) {
- String proxy = agency.getUrl();
- if (proxy == null || proxy.isEmpty()) return;
- android.util.Log.i("log:proxy", "[oss] 设置代理: " + proxy + " ("+ target + ")");
- final String prefix = target;
- OkHttpClient client = new OkHttpClient.Builder().addInterceptor(chain -> {
- Request originalRequest = chain.request();
- String requestUrl = originalRequest.url().toString();
- if (requestUrl.startsWith(prefix)) {
- String proxyUrl = requestUrl.replaceFirst(prefix, proxy);
- String proxyMethod = agency.getMethod();
- HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(proxyUrl)).newBuilder();
- Request.Builder requestBuilder = originalRequest.newBuilder();
- // 请求方法
- if (proxyMethod != null && !proxyMethod.trim().isEmpty()) requestBuilder.method(proxyMethod, originalRequest.body());
- // 请求头 -> 查询参数
- if (agency.isHeader2Query()) {
- // 1. 获取原有 headers
- Headers headers = originalRequest.headers();
- // 2. 遍历 headers,添加到 url 查询参数
- for (int i = 0; i < headers.size(); i++) urlBuilder.addQueryParameter(headers.name(i), headers.value(i));
- // 3. 清空 headers
- requestBuilder.headers(new Headers.Builder().build());
- }
- HttpUrl url = urlBuilder.build();
- requestBuilder.url(url);
- // 同步修改 Host 头
- if (url.host() != null) requestBuilder.header("host", url.host());
- Request proxyRequest = requestBuilder.build();
- android.util.Log.d("log:proxy", "[oss] OkHttp URL: [" + proxyRequest.method() + "]" + proxyRequest.url() + " (" + prefix + ")");
- return chain.proceed(proxyRequest);
- } else {
- android.util.Log.d("log:proxy", "[oss] OkHttp URL: " + requestUrl);
- return chain.proceed(originalRequest);
- }
- }).build();
- config.setOkHttpClient(client);
- }
- private OssFileUtil() {
- }
- /**
- * 上传文件
- *
- * @param context 上下文
- * @param key 在阿里云存储的路径 不要以 / 开头
- * @param path //本地路径
- * @param progressCallback 上传图片的进度条的回调接口
- * @throws ClientException 本地异常
- * @throws ServiceException 阿里云服务器异常
- */
- public void upload(Context context, String key, String path, OSSProgressCallback<PutObjectRequest> progressCallback,
- OSSCompletedCallback<PutObjectRequest, PutObjectResult> completedCallback) throws ClientException,
- ServiceException {
- OSSLog.enableLog();
- OSSCredentialProvider credentialProvider = new OSSCustomSignerCredentialProvider() {
- @Override
- public String signContent(String content) {
- return OSSUtils.sign("LTAI4G1g4B6rQeuh8oHiMrvz", "iVB8DzOfFeyLAsEMdAfokeaOEsn33T", content);
- }
- };
- OSS sOss = new OSSClient(context, OssFileUtil.endPoint, credentialProvider, config);
- PutObjectRequest put = new PutObjectRequest(bucketName, key, path);
- if (progressCallback != null) {
- put.setProgressCallback(progressCallback);
- }
- sOss.asyncPutObject(put, completedCallback);
- }
- }
|