今天记录一下oss的图片预览
大体思路是去oss拿到图片的路径,拼接地址,加密是为了防止暴露oss的地址,给前端一个流输出Base64的编码,直接在src里面显示,话不多说上代码:
/**
* 获取文件url
*
* @param objectName 文件的路径名字
* @return
*/
@Override
public FileVO getImagesUrl(String objectName) {
//设置 返回参数的url
String url = getUrl(objectName);//拼接的地址
//oss外网
String endPointOuter = aliyunOssConfig.getEndPointOuter();
//oss内网
String endpoint = aliyunOssConfig.getEndpoint();
FileVO fileVo = new FileVO();
if (url.contains(endpoint) && StringUtils.isNotEmpty(endPointOuter)) {
// 内网替换成外网
fileVo.setUrl(url.replaceAll(endpoint, endPointOuter));
} else {
fileVo.setUrl(url.replace("-internal", ""));
}
fileVo.setUrl(Base64Utils.imageUrlToBase64(url));
//加密输出地址
return fileVo;
}
/**
* 获取文件临时url
*
* @param key
* @return
*/
public String getUrl(String key) {
// 设置签名URL过期时间为200年,防止过长时间失效,使用Long类型
Date expiration = new Date(System.currentTimeMillis() + FileOssConstants.FILE_URL_EXPIRED_TIME);
// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
URL url = ossClient.generatePresignedUrl(aliyunOssConfig.getBucketName(), key, expiration);
if (url != null) {
return url.toString();
}
re
Base64Utils:这个是对文件路径发起请求,然后流输出成字符串
public class Base64Utils {
/**
* 日志
*/
private static final Logger logger = LoggerFactory.getLogger(Base64Utils.class);
/**
* 图片URL转Base64编码
* @param imgUrl 图片URL
* @return Base64编码
*/
public static String imageUrlToBase64(String imgUrl) {
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 encode(outStream.toByteArray());
} catch (Exception e) {
logger.debug(e.getMessage());
} finally {
try {
if(is != null) {
is.close();
}
if(outStream != null) {
outStream.close();
}
if(httpUrl != null) {
httpUrl.disconnect();
}
} catch (Exception e) {
logger.debug(e.getMessage());
}
}
return null;
}
/**
* 图片转字符串
* @param image 图片Buffer
* @return Base64编码
*/
public static String encode(byte[] image){
BASE64Encoder decoder = new BASE64Encoder();
return replaceEnter(decoder.encode(image));
}
/**
* 字符替换
* @param str 字符串
* @return 替换后的字符串
*/
public static String replaceEnter(String str){
String reg ="[\n-\r]";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
return m.replaceAll("");
}
}