/**
* <getImgFromUrl>
*
* @param imgUrl imgUrl
* @return pic base64
* @throws
*/
private String getImgFromUrl(String imgUrl)
throws Exception
{
URL url = null;
InputStream is = null;
ByteArrayOutputStream outStream = null;
HttpURLConnection httpUrl = null;
try
{
url = new URL(imgUrl);
httpUrl = (HttpURLConnection)url.openConnection();
httpUrl.connect();
httpUrl.getInputStream();
is = httpUrl.getInputStream();
outStream = new ByteArrayOutputStream();
//创建一个Buffer字符串
byte[] buffer = new byte[1024];
//每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0;
//使用一个输入流从buffer里把数据读取出来
while ((len = is.read(buffer)) != -1)
{
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outStream.write(buffer, 0, len);
}
// 对字节数组Base64编码
return Base64Util.encode(outStream.toByteArray());
}
catch (Exception e)
{
logger.error("get picture catch exception. cause: ", e);
throw new Exception(e);
}
finally
{
if (is != null)
{
try
{
is.close();
}
catch (IOException e)
{
logger.error("close InputStream catch exception. cause: ", e);
}
}
if (outStream != null)
{
try
{
outStream.close();
}
catch (IOException e)
{
logger.error("close OutputStream catch exception. cause: ", e);
}
}
if (httpUrl != null)
{
httpUrl.disconnect();
}
}
}
@Component
public class Base64Util
{
private static final Logger LOGGER = LoggerFactory.getLogger(Base64Util.class);
/**
* 字符串转图片
*
* @param base64Str
* @return
*/
public static byte[] decode(String base64Str)
throws IOException
{
BASE64Decoder decoder = new BASE64Decoder();
return decoder.decodeBuffer(replaceEnter(base64Str));
}
/**
* 图片转字符串
*
* @param image
* @return
*/
public static String encode(byte[] image)
{
BASE64Encoder decoder = new BASE64Encoder();
return replaceEnter(decoder.encode(image));
}
public static String encode(String uri)
{
BASE64Encoder encoder = new BASE64Encoder();
return replaceEnter(encoder.encode(uri.getBytes()));
}
/**
* @return
* @path 图片路径
*/
public static byte[] imageTobyte(String path)
{
byte[] data = null;
FileImageInputStream input = null;
try
{
input = new FileImageInputStream(new File(path));
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int numBytesRead = 0;
while ((numBytesRead = input.read(buf)) != -1)
{
output.write(buf, 0, numBytesRead);
}
data = output.toByteArray();
output.close();
input.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return data;
}
public static String replaceEnter(String str)
{
String reg = "[\n-\r]";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
return m.replaceAll("");
}
}