问题描述: 问题涉及三个平台,源图片服务器,网络服务器,文件管理服务器。网络服务器从源图片服务器通过后台HttpConnection 方式获取图片二进制流,并将二进制流转换成 base64 编码格式,再次通过 HttpConnection 方式发送到文件服务器进行存储。 第一种实现方式: imgUrl : 为一个图片链接。 Public static void save(imgUrl) { URL url = new URL(imgUrl); //获取图片二进制流 InputStream imgStream = url.openStream(); //将二进制流转化成base64编码格式 String base64ImgStr = getImageStr(imgStream); //将图片信息保存到文件管理器 String xmlStr = “
”+ “file/20140301001.jpg”+ “
”+ base64ImgStr +””+ “” saveImg(xmlStr); } public static String getImageStr(InputStream in) throws Exception { byte[] data = null; // 读取图片字节数组 try { data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } // 对字节数组Base64编码 BASE64Encoder encoder = new BASE64Encoder(); // 返回Base64编码过的字节数组字符串 return encoder.encode(data); } 按这种方式保存图片,文件比较小时(10K以下)时图片能完整保存,如果过大则只能保存部分,图片显示不完整。 第二种方式: 将二进制流分段读取并转成base64编码 public static void getImageStr (String _path, String _savePath) { String savePath = _savePath; String path = _path; int BYTE_SIZE = 1; int SAVE_SIZE = 1024; byte[] buff = new byte[BYTE_SIZE]; // 每次读的缓存 byte[] save = new byte[SAVE_SIZE]; // 保存前缓存 BufferedInputStream bf = null; FileOutputStream file; URL url = null; String imgBase64 = ""; HttpURLConnection httpUrl; try { // 对字节数组Base64编码 BASE64Encoder encoder = new BASE64Encoder(); url = new URL(path); httpUrl = (HttpURLConnection) url.openConnection(); bf = new BufferedInputStream(httpUrl.getInputStream()); file = new FileOutputStream(savePath); int i = 0; while (bf.read(buff) != -1) { // 一个字节...