1.Java>根據圖片鏈接獲取圖片資源後轉字節數組
// 調用方式
// byte[] imgBytes3 = getBytesByUrl("https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2213668399,1480023379&fm=26&gp=0.jpg");
public static byte[] getBytesByUrl(String urlPath) {
byte[] data = null;
InputStream is = null;
HttpURLConnection conn = null;
try {
URL url = new URL(urlPath);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
// conn.setDoOutput(true);
conn.setRequestMethod("GET");
conn.setConnectTimeout(6000);
is = conn.getInputStream();
if (conn.getResponseCode() == 200) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length = -1;
try {
while ((length = is.read(buffer)) != -1) {
baos.write(buffer, 0, length);
}
baos.flush();
} catch (Exception e) {
System.out.println(e.getMessage());
}
data = baos.toByteArray();
try {
is.close();
baos.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
} else{
data=null;
}
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
try {
if(is != null){
is.close();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
conn.disconnect();
}
return data;
}
2. 文件上傳資源編碼轉換
2.1. Vue>原生 Input 組件獲取圖片 Base64 編碼資源
<input type="file" accept="image/*" @change="selectImg()" ref="file"/>
此處使用 Promise 將上傳圖片資源 evt.target.result(Base64Data) 放全局變量
export default {
data: function () {
return {
// 文件名稱,文件Base64編碼資源
fileData: {
fileName: '',
imageBase64Data: ''
}
}
}
methods: {
// 選擇文件
selectImg () {
let imgFile = this.$refs.file.files[0]
if (!imgFile) {
return;
}
this.fileData.fileName = imgFile.name
let imageType = /^image\//;
if (!imageType.test(imgFile.type)) {
alert('請選擇圖片!')
return;
}
if (imgFile.size > 5 * 1024 * 1024) {
alert('請選擇不大於5M圖片!')
return;
}
let reader = new FileReader();
reader.readAsDataURL(imgFile);
//讀取文件
this.onloadFile(reader).then((result)=>{
this.fileData.imageBase64Data = result
})
},
// onload 回調結果放全局變量
onloadFile (reader) {
return new Promise(function(resolve, reject) {
reader.onload = function(evt) {
resolve(evt.target.result)
}
})
}
}
}
2.2Java>Base64 編碼資源轉 byte[]
圖片文件 Base64 編碼示例
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL ...... MVEi//2Q==
F12 打開瀏覽器控制檯,查看圖片資源,可以看到這些資源擁有固定的前綴;data 表示取得數據的協定名稱,image/png 是數據類型名稱,base64 是數據的編碼方法,"base,"後面纔是圖片文件 base64 編碼後的數據。轉換二進制數組時注意要去掉前綴
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
public class Test{
public static final String IMAGE_JPEG_BASE64 = "data:image/jpeg;base64,";
public static final String IMAGE_PNG_BASE64 = "data:image/jpeg;base64,";
public static final String IMAGE_GIF_BASE64 = "data:image/jpeg;base64,";
public static final String IMAGE_ICON_BASE64 = "data:image/jpeg;base64,";
public static void main(String args[]) throws IOException {
String imageBase64Data = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL ...... MVEi//2Q==";
imageBase64Data = imageBase64Data.substring(DATA_IMAGE_JPEG_BASE64.length());
// base64Url 轉 byte[] 方式一
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] imgByteData = base64Decoder.decodeBuffer(imageBase64Data);
// byte[] 轉 base64
String base64Data = Base64.encodeBase64String(imgByteData)
// base64Url 轉 byte[] 方式二
imgByteData = Base64.decodeBase64(imageBase64Data);
}
}
Power By niaonao, The End