package cn.jpush.api.file; import cn.jiguang.common.ClientConfig; import cn.jiguang.common.ServiceHelper; import cn.jiguang.common.connection.HttpProxy; import cn.jiguang.common.connection.IHttpClient; import cn.jiguang.common.connection.NativeHttpClient; import cn.jiguang.common.resp.APIConnectionException; import cn.jiguang.common.resp.APIRequestException; import cn.jiguang.common.resp.ResponseWrapper; import cn.jiguang.common.utils.Preconditions; import cn.jiguang.common.utils.StringUtils; import cn.jpush.api.file.model.FileModel; import cn.jpush.api.file.model.FileModelPage; import cn.jpush.api.file.model.FileType; import cn.jpush.api.file.model.FileUploadResult; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; /** * @author daixuan * @version 2020/2/23 19:38 */ public class FileClient { protected static final Logger LOG = LoggerFactory.getLogger(FileClient.class); private IHttpClient _httpClient; private String _baseUrl; private String _filesPath; private Gson _gson = new Gson(); public FileClient(String masterSecret, String appKey) { this(masterSecret, appKey, null, ClientConfig.getInstance()); } public FileClient(String masterSecret, String appKey, HttpProxy proxy, ClientConfig conf) { _baseUrl = (String) conf.get(ClientConfig.PUSH_HOST_NAME); _filesPath = (String) conf.get(ClientConfig.V3_FILES_PATH); String authCode = ServiceHelper.getBasicAuthorization(appKey, masterSecret); this._httpClient = new NativeHttpClient(authCode, proxy, conf); } public FileUploadResult uploadFile(FileType type, String filename) throws APIConnectionException, APIRequestException { Preconditions.checkArgument(type != null, "type should not be null"); Preconditions.checkArgument(StringUtils.isNotEmpty(filename), "filename should not be null"); NativeHttpClient client = (NativeHttpClient) _httpClient; String typeStr = type.value(); String url = _baseUrl + _filesPath + "/" + typeStr; Map fileMap = new HashMap<>(); fileMap.put("filename", filename); String response = client.formUploadByPost(url, null, fileMap, null); LOG.info("uploadFile:{}", response); return _gson.fromJson(response, new TypeToken() { }.getType()); } public FileModelPage queryEffectFiles() throws APIConnectionException, APIRequestException { String url = _baseUrl + _filesPath + "/"; ResponseWrapper response = _httpClient.sendGet(url); LOG.info("queryEffFiles:{}", response); return _gson.fromJson(response.responseContent, new TypeToken() { }.getType()); } public FileModel queryFile(String fileId) throws APIConnectionException, APIRequestException { Preconditions.checkArgument(StringUtils.isNotEmpty(fileId), "fileId should not be null"); String url = _baseUrl + _filesPath + "/" + fileId; ResponseWrapper response = _httpClient.sendGet(url); LOG.info("queryFile:{}", response); return _gson.fromJson(response.responseContent, new TypeToken() { }.getType()); } public ResponseWrapper deleteFile(String fileId) throws APIConnectionException, APIRequestException { Preconditions.checkArgument(StringUtils.isNotEmpty(fileId), "fileId should not be null"); String url = _baseUrl + _filesPath + "/" + fileId; ResponseWrapper response = _httpClient.sendDelete(url); LOG.info("deleteFile:{}", response); return response; } }