| | |
| | | import com.hdl.photovoltaic.internet.api.TopicApi; |
| | | import com.hdl.photovoltaic.listener.CloudCallBeak; |
| | | import com.hdl.photovoltaic.listener.LinkCallBack; |
| | | import com.hdl.photovoltaic.utils.AesUtils; |
| | | import com.hdl.photovoltaic.utils.AppManagerUtils; |
| | | import com.hdl.photovoltaic.utils.Md5Utils; |
| | | import com.hdl.sdk.link.common.exception.HDLLinkException; |
| | | import com.hdl.sdk.link.common.utils.ByteUtils; |
| | | import com.hdl.sdk.link.core.callback.HDLLinkCallBack; |
| | | |
| | | import java.io.File; |
| | | import java.io.FileOutputStream; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.lang.reflect.Type; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.logging.FileHandler; |
| | | |
| | | import okhttp3.ResponseBody; |
| | | |
| | | |
| | | /** |
| | |
| | | * |
| | | * @param downloadUrl 云端固件地址 |
| | | */ |
| | | public void getDeviceDriverDownloadFile(String downloadUrl, CloudCallBeak<DownloadUrlBean> callBack) { |
| | | String requestUrl = HttpApi.POST_OTA_GET_LinkDeviceFirmwareDownloadUrl; |
| | | JsonObject json = new JsonObject(); |
| | | public void getDeviceDriverDownloadFile(String downloadUrl, CloudCallBeak<ResponseBody> callBack) { |
| | | HttpClient.getInstance().downLoadFile(downloadUrl, new CloudCallBeak<ResponseBody>() { |
| | | @Override |
| | | public void onSuccess(ResponseBody s) { |
| | | |
| | | if (callBack != null) { |
| | | callBack.onSuccess(s); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | if (callBack != null) { |
| | | callBack.onFailure(e); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 处理下载文件数据 |
| | | * |
| | | * @param zipData 文件数据流对象 |
| | | * @param md5 检验文件MD5值 |
| | | * @return 返回解密的byte[] |
| | | */ |
| | | public byte[] disposeDownLoadFile(ResponseBody zipData, String md5) { |
| | | if (zipData == null) { |
| | | return null; |
| | | } |
| | | if (TextUtils.isEmpty(md5)) { |
| | | return null; |
| | | } |
| | | InputStream is = null; |
| | | List<Byte> byteList = new ArrayList<>(); |
| | | byte[] decrypt = null; |
| | | try { |
| | | is = zipData.byteStream(); |
| | | int total = (int) zipData.contentLength(); |
| | | byte[] buf = new byte[1024*4]; |
| | | long sum = 0; |
| | | int len = 0; |
| | | while ((len = is.read(buf)) != -1) { |
| | | sum += len; |
| | | //todo 下载中,可以自行加入进度条(可以广播出去) |
| | | int progress = (int) (sum * 1.0f / total * 100); |
| | | for (int i = 0; i < len; i++) { |
| | | byteList.add(buf[i]); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | try { |
| | | if (is != null) { |
| | | is.close(); |
| | | } |
| | | Byte[] sourceByte = byteList.toArray(new Byte[0]); |
| | | byte[] bytes = new byte[sourceByte.length]; |
| | | for (int i = 0; i < sourceByte.length; i++) { |
| | | bytes[i] = sourceByte[i]; |
| | | } |
| | | //下载文件需要解密之后再进行md5去做比对 |
| | | decrypt = AesUtils.decrypt(bytes); |
| | | if (decrypt != null) { |
| | | String fileMD5 = Md5Utils.encodeMD5(decrypt); |
| | | if (TextUtils.isEmpty(fileMD5) || !Objects.equals(fileMD5, md5)) { |
| | | //校验失败,置空 |
| | | decrypt = null; |
| | | } |
| | | } |
| | | } catch (IOException ignored) { |
| | | |
| | | } |
| | | } |
| | | return decrypt; |
| | | } |
| | | |
| | | |
| | | } |