Springmvc展示oss的图片
公开权限的图片展示
首先确定思路,存储在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;}}
参考
java进阶(八)------动态获取图片—服务端获取图片显示在jsp中
更多参考链接
安装
快速入门
授权访问
aliyun-oss-java-sdk–github
图片处理
Springmvc展示oss的图片相关推荐
- java多图片上传json_[Java教程]SpringMVC框架五:图片上传与JSON交互
[Java教程]SpringMVC框架五:图片上传与JSON交互 0 2018-08-07 22:00:42 在正式图片上传之前,先处理一个细节问题: 每一次发布项目,Tomcat都会重新解压war包 ...
- 最详细PicGo(图床)加阿里云OSS实现图片自动上传
最详细PicGo加阿里云OSS实现图片自动上传 前言 使用Typora这款markdown编辑器时,导入的图片是本地链接,在进行资源共享时,就会出现图片无法显示问题,为了将相对路径转为绝对路径,就必须 ...
- 使用阿里云的oss对图片加水印并且字体大小自适应(阿里云oss暂不支持字体大小自适应)
使用阿里云的oss对图片加水印并且字体大小自适应(阿里云oss暂不支持字体大小自适应) 背景: 首先阿里云oss云对象存储是不能做到字体大小自适应的,因为在开发中我们的图片上传的尺寸是做不到固定大小宽 ...
- oss 照片图片处理 压缩图
oss 照片图片处理 压缩图 OSS 压缩图显示, 首先创建规则,如test2 原图地址后面加?x-oss-process=style/test2 或者原图后面加规则代码 ?x-oss-process ...
- jupyter notebook 用PPT展示代码 +插入图片
jupyter notebook 用PPT展示代码 +插入图片 假设我们已经安装了anaconda,此时有jupyter notebook, 1.为了用ppt显示代码,我们需要pip install ...
- 使用阿里云OSS实现图片上传案例
文章目录 前言 一.OSS是什么? 二.使用步骤 1.开通OSS服务 2.创建bucket 3.创建子账户 4.查看帮助文档,编写后端代码 5.layui前端 总结 前言 在正式的开发环境中,类似图片 ...
- Android调用照相机展示高清图片及展示图片时图片倾斜问题
Android调用照相机展示高清图片及展示图片时图片倾斜问题 一.概述 二.配置权限 三.封装CameraUtil工具类 1.Android调用照相机 2.调用系统相册 3.拍摄完毕或在相册选取好照片 ...
- minio图片展示(minio图片上传地址为内网,展示时为外网)
minio图片展示 一.minio图片服务器 二.图片展示 1.方法一:后端转发 2.方法二:nginx代理 一.minio图片服务器 拥有两个端口号,一个时web端控制台端口号,一个是上传时使用的端 ...
- VUE Base64编码图片展示与转换图片
VUE Base64编码图片展示与转换图片 VUE Base64编码图片展示与转换图片 VUE Base64编码图片展示 Base64编码转换图片 文件转换base64编码 更便捷的图片转化Base6 ...
- 前端img标签展示tiff格式图片
前端img标签展示tiff格式图片 下面展示一些 内联代码片. *html<el-form-item label="参考图片"><img id="img ...
最新文章
- 二叉搜索树与双向链表
- java imap 标记已读,JavaMail通过IMAP和POP3接收未读以及设置已读邮件
- 高等数理统计(part3)--常见的连续型分布
- php 随机指定位数,php生成一个可选位数的随机码
- 前端程序升级linux方案,开源:AspNetCore 应用程序热更新升级工具(全网第一份公开的解决方案)...
- UI设计动效\动画素材模板|分层分步骤学习动效设计
- Python爬虫实战:应用宝APP数据信息采集
- 三、MQTT Windosw下的 进一步调试
- 多变量微积分笔记19——直角坐标系和柱坐标系下的三重积分
- python遍历目录压缩文件夹_zip包含一个档案文件夹,如何使用Python获取存档中每个zip的注释?...
- 域名ssl证书下载及部署
- 使用tayga测试无状态nat64功能
- 南京、无锡、苏州三地部分it岗待遇简况
- 模式识别和计算机科学与技术,模式识别与智能系统
- 追“根”溯源:植物根际的微生物生态
- 利用telemetry进行权限维持
- 中小企业安全路由器防火墙
- 声韵启蒙(1)-(清)车万育
- XML报表打印出错,乱码问题
- Centos7下的LibreOffice的搭建及自动化脚本部署