公开权限的图片展示
首先确定思路,存储在oss中的图片有两种权限模式,一种是公开的,这种直接通过url对应到具体某张图片即可显示。
格式如下:
http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=image/<yourAction>,<yourParamValue>
具体例子
http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg
这个链接直接在浏览器地址就能访问,所以html中显示使用
<img src="http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg" />
私有读写访问权限的图片显示
一般oss都是设置的私有读写权限,也就是必须登录认证才能获取到图片,本文主要记录这种情况下的图片展示。
安装oss的java sdk
在Maven项目中加入依赖项(推荐方式)
在 Maven 工程中使用 OSS Java SDK,只需在 pom.xml 中加入相应依赖即可。以 2.8.3 版本为例,在
<dependencies>
内加入如下内容:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
方式一 使用signurl
这种是最简单也是比较高效的方式,不会暂用我们服务器本身的带宽,只是拿到一个oss认证后的图片地址返回在html中使用,用户在浏览器访问时走的还是oss本身的带宽。
controller代码如下:
@RequestMapping("/look")
public String picLink(Model model,@RequestParam String pic_link) throws IOException {
PicLink picLink=mongoTemplate.findOne(new Query(Criteria.where("pic_link").is(pic_link)), PicLink.class);
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "23213dfd";
String accessKeySecret = "fdaeww";
String bucketName = "family-lab";
String objectName = picLink.getCloud_key();//云上的图片名称
// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// // 设置图片处理样式。不设置为原样式
// String style = "image/resize,m_fixed,w_500,h_700/rotate,90";
// 指定过期时间为10分钟。
Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10 );
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
req.setExpiration(expiration);
// req.setProcess(style);
URL signedUrl = ossClient.generatePresignedUrl(req);
System.out.println(signedUrl);
// 关闭OSSClient。
ossClient.shutdown();
model.addAttribute("signedUrl", signedUrl);
return "/look";
}
html代码
<img src="${signedUrl}" />
方式二 base64的方式
把oss中的图片通过后端下载下来变成base64的编码,在html中展示。
–该模式会消耗 我们服务器本身的带宽
参考
java进阶(九)------图片跨域显示—服务端获取图片显示在jsp中
方式三 文件流的方式
把oss中的图片通过后端下载下来变成文件流直接返回到respone中显示。–该模式会消耗 我们服务器本身的带宽
获取图片信息
// https://ram.console.aliyun.com 创建RAM账号。
String accessKeyId = "1213";
String accessKeySecret = "312314";
String bucketName = "lab";
String objectName = picLink.getCloud_key();
// 创建OSSClient实例。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 获取图片信息
String infostyle = "image/info";
GetObjectRequest inforequest = new GetObjectRequest(bucketName, objectName);
inforequest.setProcess(infostyle);
try {
ossClient.getObject(inforequest, new File("example-info.txt"));
String infoStr = readToString("example-info.txt");
System.out.println(infoStr);
deleteFile("example-info.txt");
} catch (Exception e) {
System.out.println("图片损坏设置为未处理");
if (picLink.getSource() != null && picLink.getSource().equals("familysearch")) {
picLink.setDealed(10);
}else {
picLink.setDealed(0);
}
mongoTemplate.save(picLink);
}
private String readToString(String fileName) {
String encoding = "UTF-8";
File file = new File(fileName);
Long filelength = file.length();
byte[] filecontent = new byte[filelength.intValue()];
try {
FileInputStream in = new FileInputStream(file);
in.read(filecontent);
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
return new String(filecontent, encoding);
} catch (UnsupportedEncodingException e) {
System.err.println("The OS does not support " + encoding);
e.printStackTrace();
return null;
}
}
/**
* 删除单个文件
*
* @param fileName
* 要删除的文件的文件名
* @return 单个文件删除成功返回true,否则返回false
*/
private boolean deleteFile(String fileName) {
File file = new File(fileName);
// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
if (file.exists() && file.isFile()) {
if (file.delete()) {
System.out.println("删除单个文件" + fileName + "成功!");
return true;
} else {
System.out.println("删除单个文件" + fileName + "失败!");
return false;
}
} else {
System.out.println("删除单个文件失败:" + fileName + "不存在!");
return false;
}
}
标签:String,展示,Springmvc,oss,fileName,new,picLink,图片 From: https://blog.51cto.com/u_16218512/7013735