Browse Source

修改上传逻辑

Pq 2 năm trước cách đây
mục cha
commit
5f4e87bd56

+ 65 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/ConversionUtil.java

@@ -0,0 +1,65 @@
+package com.cooleshow.base.utils;
+
+/**
+ * Author by pq, Date on 2022/11/22.
+ */
+public class ConversionUtil {
+    //这里最后一位用-比较好,因为/比较特殊
+    private static final String baseDigits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+-";
+    private static final int BASE = baseDigits.length();
+    //通过余数获取对应的64进制表示
+    private static final char[] digitsChar = baseDigits.toCharArray();
+    //这里预留了足够的空位122位
+    private static final int FAST_SIZE = 'z';
+    //这个是为了存放字母对应的值,比如-对应63,但是-是45,也就是 digitsIndex[45]=63
+    //[digitsChar[-]会自动转变成45,这样子十六进制转十进制,就可以获取到前面的数字了。
+    private static final int[] digitsIndex = new int[FAST_SIZE + 1];
+    static {
+        for (int i = 0; i < FAST_SIZE; i++) {
+            digitsIndex[i] = -1;
+        }
+        //构造:a[117]=30这样的数组
+        for (int i = 0; i < BASE; i++) {
+            digitsIndex[digitsChar[i]] = i;
+        }
+    }
+    //64进制转十进制
+    public static long decode(String s) {
+        long result = 0L;
+        long multiplier = 1;
+        for (int pos = s.length() - 1; pos >= 0; pos--) {
+            int index = getIndex(s, pos);
+            result += index * multiplier;
+            multiplier *= BASE;
+        }
+        return result;
+    }
+    //十进制转64进制
+    public static String encode(long number) {
+        if (number < 0)
+            System.out.println("Number(Base64) must be positive: " + number);
+        if (number == 0)
+            return "0";
+        StringBuilder buf = new StringBuilder();
+        while (number != 0) {
+            //获取余数
+            buf.append(digitsChar[(int) (number % BASE)]);
+            //剩下的值
+            number /= BASE;
+        }
+        //反转
+        return buf.reverse().toString();
+    }
+    //获取对应的的64进制的值
+    private static int getIndex(String s, int pos) {
+        char c = s.charAt(pos);
+        if (c > FAST_SIZE) {
+            System.out.println("Unknow character for Base64: " + s);
+        }
+        int index = digitsIndex[c];
+        if (index == -1) {
+            System.out.println("Unknow character for Base64: " + s);
+        }
+        return index;
+    }
+}

+ 24 - 2
BaseLibrary/src/main/java/com/cooleshow/base/utils/helper/upload/UploadHelper.java

@@ -2,15 +2,20 @@ package com.cooleshow.base.utils.helper.upload;
 
 import android.app.Activity;
 import android.text.TextUtils;
+import android.util.Log;
 
 import com.cooleshow.base.bean.UploadTokenInfoBean;
 import com.cooleshow.base.constanst.UploadConstants;
 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.ConversionUtil;
+import com.cooleshow.base.utils.DateUtil;
+import com.cooleshow.base.utils.EncodeUtils;
 import com.cooleshow.base.utils.FileUtils;
 import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.base.utils.SPUtils;
 import com.cooleshow.base.utils.TimeUtils;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.base.widgets.ProgressLoading;
@@ -57,6 +62,7 @@ import okhttp3.RequestBody;
  * Author by pq, Date on 2022/5/11.
  */
 public class UploadHelper {
+    public static final String USER_ID = "user_id";
     public String SRC_BUCKETNAME = UploadConstants.BUCKET_NAME_DAYA;
     public static final String END_POINT = "ks3-cn-beijing.ksyuncs.com";
     public static final String PROTOCOL = "https://";
@@ -70,6 +76,7 @@ public class UploadHelper {
     private Activity mActivity;
     private UploadProgressLoading mProgressLoading;
     private String loadingTip = "";
+    private String mUserId;
 
     public UploadHelper(Activity activity, int type) {
         this(activity, UploadConstants.getBucketNameByType(type));
@@ -79,6 +86,7 @@ public class UploadHelper {
         this.mActivity = activity;
         //获取桶名称
         SRC_BUCKETNAME = bukName;
+        mUserId = SPUtils.getInstance().getString(USER_ID);
         if (TextUtils.isEmpty(bukName)) {
             SRC_BUCKETNAME = UploadConstants.BUCKET_NAME_DAYA;
         }
@@ -126,7 +134,8 @@ public class UploadHelper {
             return;
         }
         String name = FileUtils.getFileName(file);
-        long timeStr = TimeUtils.getNowMills();
+        long nowTime = TimeUtils.getNowMills();
+        String timeStr = getBaseResult(nowTime) + "_" + mUserId;
         if (name.contains(".")) {
             String[] split = name.split("\\.");
             name = timeStr + "." + split[split.length - 1];
@@ -135,10 +144,23 @@ public class UploadHelper {
         }
         String lastName = name;
         String month = TimeUtils.date2String(TimeUtils.getNowDate(), TimeUtils.getSafeDateFormat("yyyy-MM"));
-        String key = "android/" + month + "/" + lastName;
+        String day = String.valueOf(DateUtil.dayOfMonth());
+        String key = "android/" + month + "/" + day + "/" + lastName;
         getUploadToken(name, key, file);
     }
 
+    private String getBaseResult(long timeStr) {
+//        Log.i("UploadHelper", "timeStr:" + timeStr);
+//        byte[] bytes = String.valueOf(timeStr).getBytes();
+//        String timeStrLast = EncodeUtils.base64Encode2String(bytes);
+//        Log.i("UploadHelper", "timeStrLast:" + timeStrLast);
+//        byte[] bytes1 = EncodeUtils.base64Decode(timeStrLast);
+//        String result = new String(bytes1);
+//        Log.i("UploadHelper", "result:" + result);
+        String encode = ConversionUtil.encode(timeStr);
+        return encode;
+    }
+
     private void doUpload(String key, File file) {
         PutObjectRequest putObjectRequest = new PutObjectRequest(SRC_BUCKETNAME, key, file);
         putObjectRequest.setCannedAcl(CannedAccessControlList.PublicRead);