在SpringBoot中使用【阿里云OSS对象存储】存取图片
发布日期:2021-06-30 16:50:41
浏览次数:3
分类:技术文章
本文共 8395 字,大约阅读时间需要 27 分钟。
一、前言
1、用户文件存储在项目中,项目体积会日益增大,给日后项目代码更新、部署上传时间增长。 此外 linux、windows 的路径不一致,保存文件的路径只能使用相对路径
,前端展示文件时 src
需要 + http://port/xxx
补全路径,增加了点业务逻辑。 等等。
2、OSS云存储技术优点:
1.OSS 内存省钱
2.可以使用了第三方cdn,访问速度快
3、使用了阿里云OSS技术其他优点:
1.浏览器访问图片(png、jpg…)url,显示图片;
2.浏览器访问文件(doc、pdf…)url,自动下载文件;
二、思路
1、前台上传图片给后台
2、后台把图片上传到阿里云服务器的OSS中
3、同时生成图片访问的 url,保存到数据库中
4、显示图片的时候,使用 url,如下的使用方式
二、代码
2017.7.14 更新,代码已经放在 github 上了:https://github.com/larger5/oss_aliyun_springboot.git
1、代码目录
2、entity 实体
package com.cun.entity;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name="t_picture")public class Picture { @Id @GeneratedValue private Integer id; @Column(length=50) private String picName; @Column(length=200) private String url; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getPicName() { return picName; } public void setPicName(String picName) { this.picName = picName; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; }}
2、dao 接口
package com.cun.dao;import org.springframework.data.jpa.repository.JpaRepository;import com.cun.entity.Picture;public interface PictureDao extends JpaRepository
3、Service 接口
package com.cun.service;import java.util.List;import com.cun.entity.Picture;public interface PictureService { /** * 删 * @param id */ void deletePicture(Integer id); /** * 改 * @param picture */ void updatePicture(Picture picture); /** * 查 * @param id * @return */ Picture getPicture(Integer id); /** * 增 * @param picture */ void insertPicture(Picture picture); /** * 全 * @return */ List
4、Service 实现类
package com.cun.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.cun.dao.PictureDao;import com.cun.entity.Picture;import com.cun.service.PictureService;@Servicepublic class PictureServiceImpl implements PictureService{ @Autowired private PictureDao pictureDao; @Override public void deletePicture(Integer id) { pictureDao.delete(id); } @Override public void updatePicture(Picture picture) { pictureDao.save(picture); } @Override public Picture getPicture(Integer id) { return pictureDao.getOne(id); } @Override public void insertPicture(Picture picture) { pictureDao.save(picture); } @Override public List
5、Controller 控制层
package com.cun.controller;import java.io.ByteArrayInputStream;import java.io.IOException;import java.net.URL;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.DeleteMapping;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.PutMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import com.aliyun.oss.ClientException;import com.aliyun.oss.OSSClient;import com.aliyun.oss.OSSException;import com.cun.entity.Picture;import com.cun.service.PictureService;@Controller@RequestMapping("/picture")public class PictureController { @Autowired private PictureService pictureService; /** * 主页 * @return */ @GetMapping("/") public String toIndex() { return "add"; } /** * 全 * @return */ @ResponseBody @GetMapping("/all") public List
6、添加页 add.html
ITAEM
7、展示页 show.html
ITAEM
8、pom 阿里云sdk依赖
com.aliyun.oss aliyun-sdk-oss 2.8.2
其他
三、其他
1、阿里云 OSS API 文档:
2、操作记录 gif 图 3、发布到 Linux 上的时,若要打成 war 包,会发现第三方 jar (本位为 ali oss)没有导入,可以参考如下文章: https://www.sojson.com/blog/253.html 4、确保图片名称唯一,使用 uuid 比较好,不要使用时间字符串,应对不了高并发String id = UUID.randomUUID().toString();
5、参考文章: #四、2018.8.2 更新 做项目经常要用到,于是将 OSS 上传文件,下载访问文件 url,封装成一个 utils package com.cun.app.utils;import java.io.ByteArrayInputStream;import java.io.IOException;import java.net.URL;import java.text.SimpleDateFormat;import java.util.Date;import org.springframework.web.multipart.MultipartFile;import com.aliyun.oss.ClientException;import com.aliyun.oss.OSSClient;import com.aliyun.oss.OSSException;/** * 把文件保存到阿里云OSS,返回文件访问路径 * @author linhongcun * */public class Oss { public static String getFileUrl(MultipartFile fileupload) throws OSSException, ClientException, IOException { // 获取文件后缀名 String suffix =getSuffix(fileupload); // 填自己的帐号信息 String endpoint = "oss-cn-shenzhen.aliyuncs.com"; String accessKeyId = "LTAIATBxxxxxxxx4R"; String accessKeySecret = "VuCGomJW0O5xxxxxxxxx9QKR"; // 创建OSSClient实例 OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); // 文件桶 String bucketName = "itaem"; // 文件名格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss"); // 该桶中的文件key String dateString = sdf.format(new Date()) + "."+suffix; // 20180322010634.jpg // 上传文件 ossClient.putObject("itaem", dateString, new ByteArrayInputStream(fileupload.getBytes())); // 设置URL过期时间为100年,默认这里是int型,转换为long型即可 Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 100); // 生成URL URL url = ossClient.generatePresignedUrl(bucketName, dateString, expiration); return url.toString(); } // 获取文 MultipartFile 文件后缀名工具 public static String getSuffix(MultipartFile fileupload){ String originalFilename = fileupload.getOriginalFilename(); String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); System.out.println(suffix); return suffix; }}
转载地址:https://larger5.blog.csdn.net/article/details/79666166 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月13日 05时01分28秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Jenkins 控制台输出中的奇怪字符
2019-04-30
Linux添加系统调用
2019-04-30
linux内存的寻址方式
2019-04-30
ubunut16.04的pip3出现问题,重新安装pip3
2019-04-30
how2heap-double free
2019-04-30
how2heap-fastbin_dup_consolidate
2019-04-30
orw_shellcode_模板
2019-04-30
[fmt+shellcode]string
2019-04-30
fmt在bss段(neepusec_easy_format)
2019-04-30
[double free] 9447 CTF : Search Engine
2019-04-30
python 函数式编程
2019-04-30
python编码
2019-04-30
scala maven plugin
2019-04-30
flink 1-个人理解
2019-04-30
redis cli
2019-04-30
redis api
2019-04-30
flink physical partition
2019-04-30
java 解析json
2019-04-30
java http请求
2019-04-30