最近在項目中種遇到了一個比較奇葩的問題漱挎,需求要求上傳圖片要的是圖片的二進(jìn)制流,而不是常用的模式锋玲,上傳到圖片到服務(wù)器用返回的url(http://xxxx...)形式的方式保存到數(shù)據(jù)庫翁涤,
順便附上轉(zhuǎn)二進(jìn)制的代碼:
/**
* 圖片文件轉(zhuǎn)Base64字符串 * @param path 文件所在的絕對路徑加文件名
*
* @return
*/
private String fileBase64String(String path) {
try {
FileInputStream fis = new FileInputStream(path);
//轉(zhuǎn)換成輸入流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count = 0;
while ((count = fis.read(buffer)) >= 0) {
baos.write(buffer, 0, count);//讀取輸入流并寫入輸出字節(jié)流中
}
fis.close();//關(guān)閉文件輸入流
String uploadBuffer = new String(Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT)); //進(jìn)行Base64編碼
return uploadBuffer;
} catch (Exception e) {
return null;
}
}
進(jìn)入正題形庭,
通過Glide用二進(jìn)制的方式加載圖片的時候有問題了劫侧,第一次加載二進(jìn)制圖片是沒有問題的能正常顯示埋酬,但是再次選擇新的圖片轉(zhuǎn)換成二進(jìn)制,再進(jìn)行顯示的時候烧栋,新的圖片并不能正常顯示写妥,找了大半天的原因最終在Glide源碼發(fā)現(xiàn)有設(shè)置一個
.apply(signatureOf(new ObjectKey(UUID.randomUUID())))
在內(nèi)存某段時間內(nèi),設(shè)置新的二進(jìn)制圖片是不生效的审姓,
最終解決:
Glide.with(mContext).load(CommonUtils.stringToByte(url))
.apply(initGlideOptions(defaultIds, errorIds))
.apply(signatureOf(new ObjectKey(url)))//設(shè)置內(nèi)存一個臨時的tag值珍特,在某段時間內(nèi),如果是同一個圖片就直接取內(nèi)存里的
.into(imageView);
注:更新新的版本發(fā)現(xiàn)load(byt[] model)這個方法的源碼已經(jīng)變了魔吐,我沒有更新扎筒,不知道新的版本有沒有這個問題呼猪,