网络图片地址直接转Base64

最近懒得动,博客很久没更了。

现在很多云服务,图片保存在网络中了。或者对接其他系统,资源也都是拿到的地址。由于我方服务器处理器内存磁盘空间都较小,想直接拿到网络图片地址的base64值。

以前的方法是先把网络图片下载到服务器,然后转base64,耗费服务器资源。弃之!

方法来源于网友,本博客只是收录:

通用方法:

/**
	 * 将网络图片编码为base64
	 *
	 * @param url
	 * @return
	 * @throws
	 */
	public static String encodeImageToBase64(URL url) throws Exception {
	//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
			System.out.println("图片的路径为:" + url.toString());
	//打开链接
			HttpURLConnection conn = null;
			try {
				conn = (HttpURLConnection) url.openConnection();
	//设置请求方式为"GET"
				conn.setRequestMethod("GET");
	//超时响应时间为5秒
				conn.setConnectTimeout(5 * 1000);
	//通过输入流获取图片数据
				InputStream inStream = conn.getInputStream();
	//得到图片的二进制数据,以二进制封装得到数据,具有通用性
				ByteArrayOutputStream outStream = new ByteArrayOutputStream();
	//创建一个Buffer字符串
				byte[] buffer = new byte[1024];
	//每次读取的字符串长度,如果为-1,代表全部读取完毕
				int len = 0;
	//使用一个输入流从buffer里把数据读取出来
				while ((len = inStream.read(buffer)) != -1) {
	//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
					outStream.write(buffer, 0, len);
				}
	//关闭输入流
				inStream.close();
				byte[] data = outStream.toByteArray();
	//对字节数组Base64编码
				BASE64Encoder encoder = new BASE64Encoder();
				String base64 = encoder.encode(data);
				System.out.println("网络文件[{}]编码成base64字符串:[{}]"+url.toString()+base64);
				return base64;//返回Base64编码过的字节数组字符串
			} catch (IOException e) {
				e.printStackTrace();
				throw new Exception("图片上传失败,请联系客服!");
			}
		}

调用该方法(转码的base64值不带前缀,需自行添加):

URL url = new URL(user.getPicture());
String base64str=encodeImageToBase64(url);

阿里云的API我用得少,也找了一个,我用永久地址的图片(公共读的bucket)测试发现不行,还没有用私有bucket的图片地址测试,有时间再说,代码见下:

public static String getBase64FromUrl(String imgUrl) throws IOException {
		String prfFix = "data:image/" +   "jpeg;base64,";
		OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
		GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName,imgUrl, HttpMethod.GET);
		req.setExpiration(new Date(new Date().getTime()+1000L * 60L * 60L));
		req.setProcess(prfFix);
		URL signedUrl = ossClient.generatePresignedUrl(req);
		System.out.println(signedUrl.toString());


		HttpClient client = new DefaultHttpClient();
		HttpGet get = new HttpGet(signedUrl.toString());
		HttpResponse response = client.execute(get);
		if (response.getStatusLine().getStatusCode() == 200){
			HttpEntity entity = response.getEntity();
			byte[] data = EntityUtils.toByteArray(entity);
			BASE64Encoder encoder = new BASE64Encoder();
			String encode = encoder.encode(data);
			return encode;
		}else {
			return null;
		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值