首页 > 其他分享 >Springmvc展示oss的图片

Springmvc展示oss的图片

时间:2023-08-08 23:36:09浏览次数:42  
标签:String 展示 Springmvc oss fileName new picLink 图片


公开权限的图片展示

首先确定思路,存储在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

相关文章

  • 瓴羊Quick BI:数据大屏可视化展示,助企业提升竞争优势
    如今,大数据技术已经成为企业缩短与竞争对手差距的重要手段。在这个数字化时代,数据的价值越来越被重视。通过对海量数据的收集、处理和分析,企业能够更好地了解市场、客户需求以及自身业务状况,从而作出更明智的决策,并提供更优质的产品和服务。而在经历了初期的大数据工具的筛选后,更多......
  • 成功搞定H7-TOO的FreeRTOS Trace图形化链表方式展示任务管理
    之前推出了H7-TOOL的RTOSTrace功能,已经支持RTX5,ThreadX,uCOS-III,uCOS-II和FreeRTOS,特色是不需要目标板额外做任何代码,实时检测RTOS任务执行情况,支持在线和脱机玩法,效果是下面这样的:  这样的展示还不够直观,这几天开始研究图形化链表方式展示任务管理,从源码的角度来看,OS内核......
  • vue-pdf 在vue中展示pdf
    老规矩先看效果图: 这玩意的坑是相当的多,如果只是单纯的网页浏览,真心建议直接使用<iframe>来进行嵌入pdf吧,省心也省事我这边的web页面是需要放到客户端里面的,然后由于某些原因吧,不支持显示iframe嵌入的pdf网页,只能使用vue-pdf来进行实现了下面就说一下实现步骤吧,我尽量说的......
  • 阿里云: web如何直传oss & 常见问题
    阿里云:web如何直传oss&常见问题 如何使用input.Type=‘file‘拿到文件对象1、在页面中添加<inputtype="file"style="display:none"ref="input"@input="upload">在需要上传文件的地方增加<button@click="$refs.input.click()">......
  • Django-4.2博客开发教程:数据库操作-页面动态展示数据库中的数据(十)
    1、数据准备工作首先增加2篇文章用于展示数据。 我用的mysql数据库,使用pycharm的DBBrowser进行数据查询。双击blog库下面对应的文章表,则显示当前数据。 2、查询数据并动态展示models.py里的类就是一个模板,在views.py引入并实例化。即将值查询出来并赋值到一个对象,在页......
  • SpringMVC的搭建idea2021、tomcat8.5
    准备环境idea2021tomcat8.0资料来源,尚硅谷的视频1、新建项目      生成pom.xml文件 3、pom.xml文件添加依赖<dependencies><!--SpringMVC--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</arti......
  • 议程公布!2022(第二届)座舱监控系统(IMS)前瞻技术展示交流会3月25号与您相约上海!
    大会背景在此背景下,智车行家携手易贸信息科技于2022年3月25-26日于上海举办2022(第二届)座舱监控系统(IMS)前瞻技术展示交流会。与知名车企、Tier1、系统集成商、模组企业、核心元器件供应商、封装测试以及科研院所等400余位行业专家共同探讨汽车座舱监控系统的行业趋势、创新应用、技......
  • syslog日志发送、接收与展示
    三、展示1.tar-zxvf loganalyzer-3.6.0.tar.gz2. yum -y install httpdphp*cp -r src/* /var/www/html/loganalyzercp -r contrib/* /var/www/html/loganalyzerchown -R daemon.daemon /var/www/html/loganalyzer 通过web向导安装loganalyzer前,......
  • Java面试题 P48:框架篇:Spring框架常见注解(Spring、SpringBoot、SpringMvc)
        ......
  • Java面试题 P46:框架篇:SpringMvc的执行流程?
         ......