提示:这是我的个人IT资源网站,所有资源都免费,注册登录后就可以看到密码,需要什么大家尽情选取!
在项目中不管是上传文件还是图片,我们一般会选择上传到服务器,那么当我们想访问上传的文件或图片时,需要搭建WEB服务器对文件或图片进行映射,才能被外界访问,这时会产生两个问题,一是肯定会增加对服务器的访问请求,二是肯定会占用服务器的存储,其实除了存储在我们的服务器上这个方案外,还可以上传到可靠的第三方平台,我最近使用了阿里的OSS服务,感觉挺好使,所以在这里总结一下,并推荐给大家,有两个优点,一是提供各种语言的SDK,所以集成起来特别方便,二是阿里目前是国内的技术龙头,企业或者个人服务器很多都是使用阿里云服务器,所以在稳定性和安全性上毫无置疑,这样可以将一些文件图片的访问转移到阿里提供的OSS服务,一举两得,但是毕竟是用人家的服务,虽然有免费存储空间,但是有限,如果小体量的话,应该够用,大体量,我觉着也不差这点钱了,哈哈,下面我就一步一步介绍一下,如何将阿里的OSS服务集成到我们的SpringBoot项目中
首先肯定是登录阿里云了,现在都需要实名认证,可以通过支付宝登录,支付宝大家应该都有,而且信息互通,所以一登录就相当于实名认证了
登录进去,我们找到OSS服务,点击进去
然后点击右侧,创建一个Bucket,就像一个存储空间
然后填写Bucket内容,主要填写名称和选择地域,还有一个读写权限,如果是一些公共都可以访问的图片或文件,就直接选择公共读
创建之后,就可以在Bucket列表看到了
下面我们就来集成到我们的SpringBoot项目里面,首先创建一个SpringBoot项目,这个过程就不列举了,大家应该都会,讲一下重点内容
一、引入Maven依赖
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.1.0</version>
</dependency>
二、下面看一下主要的java代码,很少,很容易集成
//application.properties的配置信息,这些信息去阿里云网站查找
#阿里云OSS
#不同的服务器,地址不同
aliyun.dpoint=
#创建一个Access Key,找下图创建
aliyun.oss.file.keyid=
aliyun.oss.file.keysecret=
#创建Bucket时的名称
aliyun.oss.file.bucketname=
//常量类,读取application.properties内容
@Component
public class ConstantPropertiesUtils implements InitializingBean {//读取配置文件内容@Value("${aliyun.dpoint}")private String endpoint;@Value("${aliyun.oss.file.keyid}")private String keyId;@Value("${aliyun.oss.file.keysecret}")private String keySecret;@Value("${aliyun.oss.file.bucketname}")private String bucketName;//定义公开静态常量public static String END_POINT;public static String ACCESS_KEY_ID;public static String ACCESS_KEY_SECRET;public static String BUCKET_NAME;@Overridepublic void afterPropertiesSet() throws Exception {END_POINT = endpoint;ACCESS_KEY_ID = keyId;ACCESS_KEY_SECRET = keySecret;BUCKET_NAME = bucketName;}
}
//service实现类
@Service
public class OssServiceImpl implements OssService {String endpoint = ConstantPropertiesUtils.END_POINT;String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;String bucketName = ConstantPropertiesUtils.BUCKET_NAME;//文件上传@Overridepublic String uploadFileAvatar(MultipartFile file) {try{//创建OSSClient实例OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);//获取上传文件输入流InputStream inputStream = InputStream();//获取文件名称String fileName = OriginalFilename();//在文件名称里面添加随机唯一的值String uuid = UUID.randomUUID().toString().replaceAll("-", "");fileName = uuid + fileName;//获取当前日期String datePath = new DateTime().toString("yyyy/MM/dd");fileName = datePath + "/" + fileName;ossClient.putObject(bucketName, fileName, inputStream);//关闭OSSClientossClient.shutdown();//把上传之后文件路径返回String url = "" + bucketName + "." + endpoint + "/" + fileName;return url;}catch (Exception e){e.printStackTrace();return null;}}/*** 文件下载* @param url*/@Overridepublic void downFileAvatar(String url, HttpServletResponse response){try {//创建OSSClient实例OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。String path = place("" + bucketName + "." + endpoint + "/", "");OSSObject ossObject = Object(bucketName, path);// 读取文件内容。InputStream inputStream = ObjectContent();set();response.setContentType("application/octet-stream");response.addHeader("Content-Disposition", "attachment; filename=" + de(path.split("/")[path.split("/").length - 1], "UTF-8"));OutputStream outputStream = OutputStream();// 循环取出流中的数据byte[] b = new byte[100];int len;try {while ((len = ad(b)) > 0) {outputStream.write(b, 0, len);}}catch (Exception e){e.printStackTrace();}finally {// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。inputStream.close();outputStream.close();// ossObject对象使用完毕后必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。ossObject.close();ossClient.shutdown();}} catch (OSSException oe) {oe.printStackTrace();} catch (Throwable ce) {ce.printStackTrace();}}
}
这样基本就完成了集成阿里OSS服务,是不是很简单,大家可以试试!
下面是我集成后,上传图片成功后,返回的url,可以观察一下url
.png
本文发布于:2024-01-31 01:14:08,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170663485124282.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |