管灌系统巡查员智能手机App
zuoxiao
2025-01-08 94c235c116ebca594662417b5fb2c7378f326c6b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package com.dayu.pipirrapp.tool;
 
import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread;
 
import android.content.Context;
import android.text.TextUtils;
 
import com.dayu.pipirrapp.adapter.AddPictureAdapter;
import com.dayu.pipirrapp.bean.net.UplodFileState;
import com.dayu.pipirrapp.net.ApiManager;
import com.dayu.pipirrapp.net.BaseResponse;
import com.luck.picture.lib.entity.LocalMedia;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
import retrofit2.Call;
 
/**
 * FileUploadUtils -
 *
 * @author zuoxiao
 * @version 1.0
 * @since 2025-01-03
 */
public class FileUploadUtils {
 
 
    /**
     * 上传图片文件
     *
     * @param context
     * @param uplodFileState
     * @param uplodFileStates
     * @param adapter
     */
    public static void uploadFile(Context context, UplodFileState uplodFileState, Map<String, UplodFileState> uplodFileStates, AddPictureAdapter adapter) {
        ApiManager.getInstance().uploadFile(context, uplodFileState, state -> {
            uplodFileStates.replace(state.getFilePath(), state);
            adapter.updateProgress(uplodFileState);
        }, adapter);
    }
 
    /**
     * 当关闭activity时关闭所有请求
     *
     * @param uplodFileStates
     */
    public static void cancelAllCall(Map<String, UplodFileState> uplodFileStates) {
        try {
            for (UplodFileState uplodFileState : uplodFileStates.values()) {
                Call<BaseResponse> mCall = uplodFileState.getThisCall();
                if (mCall != null) {
                    mCall.cancel();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
    // 更新UI
    public static void updateUI(ArrayList<LocalMedia> result, AddPictureAdapter mAdapter) {
        runOnUiThread(() -> {
            boolean isMaxSize = result.size() == mAdapter.getSelectMax();
            int oldSize = mAdapter.getData().size();
            mAdapter.notifyItemRangeRemoved(0, isMaxSize ? oldSize + 1 : oldSize);
            mAdapter.getData().clear();
            mAdapter.getData().addAll(result);
            mAdapter.notifyItemRangeInserted(0, result.size());
        });
    }
 
    public static void cancelRemovedUploads(ArrayList<LocalMedia> result, Map<String, UplodFileState> uplodFileStates) {
        List<String> pathsToRemove = new ArrayList<>();
        for (UplodFileState uplodFileState : uplodFileStates.values()) {
            String filePath = uplodFileState.getFilePath();
            // 检查 result 中是否包含该文件路径
            boolean isInResult = false;
            for (LocalMedia media : result) {
                String compressPath = media.getCompressPath();
                //判断是否有这个路径,没有的话上传该图片并添加uplodFileStates中
                if (TextUtils.isEmpty(compressPath)) {
                    compressPath = media.getRealPath();
                }
                if (compressPath.equals(filePath)) {
                    isInResult = true;
                    break;
                }
            }
            // 如果 result 中没有该路径,则将其加入待移除列表
            if (!isInResult) {
                try {
                    //没有该文件以后取消上传
                    uplodFileState.getThisCall().cancel();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                pathsToRemove.add(filePath);
            }
        }
        for (String removeFile : pathsToRemove) {
            uplodFileStates.remove(removeFile);
        }
    }
 
    /**
     *
     * @param context
     * @param media
     * @param uplodFileStates
     * @param mAdapter
     */
    public static void creatAndUploadFile(Context context, LocalMedia media, Map<String, UplodFileState> uplodFileStates, AddPictureAdapter mAdapter) {
        String compressPath = media.getCompressPath();
        //判断是否有这个路径,没有的话上传该图片并添加uplodFileStates中
        if (TextUtils.isEmpty(compressPath)) {
            compressPath = media.getRealPath();
        }
        if (!uplodFileStates.containsKey(compressPath)) {
            UplodFileState uplodFileState = new UplodFileState();
            uplodFileState.setFilePath(compressPath);
            if (compressPath.toLowerCase().endsWith(".mp4") || compressPath.toLowerCase().endsWith(".avi") || compressPath.toLowerCase().endsWith(".mkv") || compressPath.toLowerCase().endsWith(".mov")) {
                // 这是视频文件
                uplodFileState.setUploadType(UplodFileState.VIDEO_TYPE);
            } else {
                uplodFileState.setUploadType(UplodFileState.IMG_TYPE);
            }
            uplodFileState.setExtName(media.getMimeType());
            uplodFileStates.put(compressPath, uplodFileState);
            // 执行上传图片的操作
            FileUploadUtils.uploadFile(context, uplodFileState, uplodFileStates, mAdapter);
        }
    }
 
}