阿里云OSS对象存储实现文件的上传,并返回访问路径
话不多说,直接上干货
官方文档:https://help.aliyun.com/product/31815.html?spm=a2c4g.11186623.6.540.539d28bca7ZyUR
1.首先引入pom依赖
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.8.0</version></dependency>
2.文件上传代码
Controller层:
public String upload(MultipartFile file){return fileUploadService.upload(file);}
Service层:
String upload(MultipartFile multipartFile);
ServiceImpl层:
@Overridepublic String upload(MultipartFile multipartFile){// 定义你的BucketNameString bucketName = "<yourBucketName>";String fileAllName = multipartFile.getOriginalFilename();String fileType = fileAllName.substring(fileAllName.lastIndexOf(".") + 1);String uuid = UUID.randomUUID().toString().replaceAll("-","");filePath = filePath + "/" +uuid +"."+fileType;String url=endpoint.replaceFirst("http://","http://"+bucketName +".")+"/"+filePath; String contentType = OssUtils.getContentType(fileAllName);//保存本地File file = XmlUtil.ossUpload(multipartFile);try {//上传ossOssUtils.ossUpload(filePath, file,contentType);}catch (Exception e){e.printStackTrace();System.out.println("上传失败");}//删除本地文件XmlUtil.deleteFile(file);return url;}
3.工具类
3.1 OssUtils:
public class OssUtils {// 创建存储空间,Endpoint以杭州为例,其它Region请按实际情况填写。private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";private String accessId = "<yourAccessKeyId>";private String accessKey = "<yourAccessKeySecret>";private String privateDomain = "<yourPrivateDomain >";private String privateBucket = "<yourBucketName>";public void ossUpload(String fileName, File file, String contentType) {try {OSS ossClient = new OSSClientBuilder().build(endpoint, accessId, accessKey);ObjectMetadata meta = new ObjectMetadata();meta.setContentType(contentType);UploadFileRequest uploadFileRequest = new UploadFileRequest(privateBucket, fileName);// 指定上传的本地文件。uploadFileRequest.setUploadFile(file.toString());// 指定上传并发线程数,默认为1。uploadFileRequest.setTaskNum(5);// 指定上传的分片大小,范围为100KB~5GB,默认为文件大小/10000。uploadFileRequest.setPartSize(1 * 1024 * 1024);// 开启断点续传,默认关闭。uploadFileRequest.setEnableCheckpoint(true);uploadFileRequest.setCheckpointFile("uploadFile.ucp");// 文件的元数据。uploadFileRequest.setObjectMetadata(meta);// 设置上传成功回调,参数为Callback类型。//uploadFileRequest.setCallback("<yourCallbackEvent>");// 断点续传上传。ossClient.uploadFile(uploadFileRequest);// 关闭OSSClient。ossClient.shutdown();} catch (FileNotFoundException e) {e.printStackTrace();} catch (Throwable throwable) {throwable.printStackTrace();}}/*** 通过文件名判断并获取OSS服务文件上传时文件的contentType*/public String getContentType(String fileName) {String fileExtension = fileName.substring(fileName.lastIndexOf("."));if (".bmp".equalsIgnoreCase(fileExtension)) {return "image/bmp";}if (".gif".equalsIgnoreCase(fileExtension)) {return "image/gif";}if (".jpeg".equalsIgnoreCase(fileExtension)) {return "image/jpeg";}if (".jpg".equalsIgnoreCase(fileExtension)) {return "image/jpg";}if (".png".equalsIgnoreCase(fileExtension)) {return "image/png";}if (".html".equalsIgnoreCase(fileExtension)) {return "text/html";}if (".txt".equalsIgnoreCase(fileExtension)) {return "text/plain";}if (".vsd".equalsIgnoreCase(fileExtension)) {return "application/vnd.visio";}if (".ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension)) {return "application/vnd.ms-powerpoint";}if (".doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension)) {return "application/msword";}if (".xml".equalsIgnoreCase(fileExtension)) {return "text/xml";}if (".mp4".equalsIgnoreCase(fileExtension)) {return "video/mp4";}if (".mp3".equalsIgnoreCase(fileExtension)) {return "audio/mp3";}return "text/html";}
}
3.2 XmlUtil:
public class XmlUtil {public static void deleteFile(File... files) {for (File file : files) {//logger.info("File:[{}]",file.getAbsolutePath());if (file.exists()) {file.delete();}}}public static File ossUpload(MultipartFile file) throws IOException {// 获取文件名String fileName = file.getOriginalFilename();// 获取文件后缀String prefix = fileName.substring(fileName.lastIndexOf("."));// 用uuid作为文件名,防止生成的临时文件重复File excelFile = File.createTempFile(UUID.randomUUID().toString(), prefix);// MultipartFile to Filefile.transferTo(excelFile);//程序结束时,删除临时文件return excelFile;}
}
PS: 没有写概念类的东西,建议看之前先看看官网文档哦,然后就能看懂代码啦,小伙伴们加油哦
阿里云OSS对象存储实现文件的上传,并返回访问路径相关推荐
- 阿里云OSS对象存储(文件上传与下载)宝宝级教程
1.注册自己的阿里云账号 2.登录账号以后,进入主页面搜索"对象存储OSS 然后可以看到如下界面 立即购买,自己学习使用可以选择购买最小的存储空间,半年即可 管理控制台,购买了存储空间以后可 ...
- java oss 批量传输_阿里云OSS对象存储,服务端签名后直传阿里云OSS
继续上一章文章,这次要操作的是,浏览器请求服务要到签名后直传给OSS对象存储. 1.写好服务端的方法,传给前台相应的密钥 @Resource OSSClient ossClient; @Value(& ...
- 阿里云OSS对象存储-图文详解
阿里云OSS对象存储 认识OSS 一.创建Bucket 二.后台服务接口编写 三.接口测试 认识OSS 在实际的项目中,经常要用到上传图片的地方,阿里云的OSS对象存储,可以很好的将我们上传的图片存储 ...
- 阿里云OSS对象存储搭建网盘教程
阿里云OSS对象存储高可靠数据存储服务,使用OSS对象存储搭建个人网盘或企业网盘,存储可靠性高下载不限速,当然阿里云推出了自家的网盘,码笔记分享使用OSS对象存储搭建个人网盘或企业网盘的方法: 使用O ...
- 【Typora图床设置】Typora图片上传和阿里云OSS对象存储
问题描述 因为Typora是纯文本编辑器,所以无法导入图片,但是可以显示图片.换句话说,Typora文档中保存的图片实际上是图片的存储地址,Typora会根据这个地址来显示图片.我们在使用Typora ...
- 5分钟解决阿里云oss对象存储
5分钟解决阿里云OSS对象存储 后附关键代码 启动代码如下: pom.xml里添加依赖 com.aliyun.oss aliyun-sdk-oss 2.8.3 1.建类AliyunOSSClientU ...
- Java使用阿里云OSS对象存储上传图片
示例说明 该案例是OSS Java SDK的示例程序,您可以修改endpoint.accessKeyId.accessKeySecret.bucketName后直接运行. 本示例中的并不包括OSS ...
- 6、阿里云OSS对象存储手把手学习及企业使用方案
文章目录 1.什么是分布式文件系统 2.图片存储解决方案 3.阿里云OSS对象存储 3.1.开通oss访问 3.2.购买服务 3.3.基本概念 3.4.创建一个bucket 3.5.创建AccessK ...
- 阿里云OSS——对象存储服务(工具)
阿里云OSS--对象存储服务(工具) 一.依赖 二.yaml配置 三.OSS工具类 四.demo演示 4.1 SpringBoot启动类 4.2 Controller接口 4.3 swagger测试 ...
最新文章
- 是否会回到起点.回忆只能是回忆
- 关于service层、dao层,以及O/R Mapping之间的思考
- 现代密码学1.4--现代密码的三大原则
- HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容
- 微信小程序设置底部导航栏目方法
- PHP连接PGSQL
- 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)
- 一张图看懂云栖大会·上海峰会重磅产品发布
- python在统计专业的应用_Python:使用Counter进行计数统计
- Ubuntu16.04实现Sphinx离线语音识别
- 20220307:力扣第283场周赛(上)
- CSDN在2017年度的若干“升级”
- HDOJ 1420 Prepared for New Acmer(DP)
- Onvif协议:门外汉理解ONVIF协议
- 看完Jeff Dean新论文,我再也不相信大厂的鬼话了
- 上传图片保存到mysql数据库并在网页上显示
- 程序员之路:Gmail邮箱客户端配置
- 在Redhat9上安装Oracle 9.2
- 云端服务器跑python代码,断开后台运行
- Office Powerpoint演示文档大瘦身
热门文章
- 手机游戏串号被封之后靠谱的解封方法
- linux虚拟机中安装geth
- 曲线积分与曲面积分总结_CFD理论扫盲03 向量微积分
- 详解python中for循环的_《详》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
- JEECMS v8 发布,java 开源 CMS 系统
- Revit剪贴板用法复制一样的楼层及构件一键剪切功能
- MySQL 服务正在启动 MySQL 服务无法启动解决办法
- 2的2.8次方用计算机怎么算,2.8 计算器的使用(含答案)
- python安装时选justme_详解Anaconda 的安装教程
- 南邮Android Studio应用高德地图API获取SHA1码