目录

依赖添加

实体类:

OSS配置类:

OSSUtil工具类:

OSS上传接口类:

OSS上传接口实现类:

OSS上传控制类:

工具类:


依赖添加

在Maven的pom.xml文件中添加OSS的依赖:

<!--阿里云OSS-->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.3</version>
</dependency>

在application.yml中添加配置信息:

#OSS配置
oss:#带有地域节点的请求地址endpoint: oss-cn-beijing.aliyuncs.com#阿里云用户idaccessKey: XXXXXXRnmzC2aafr9KXXXXXX#阿里云用户密码secretKey: XXXXXXFBaNzv85rqiks804mGXXXXXX#阿里云存储空间名bucketname: home#阿里服务器的域名fileHost: http://home.oss-cn-beijing.aliyuncs.com/#上传文件路径filePath: upload

实体类:

import lombok.Data;/*** @author CYY* @date 2022/4/15 16:52*/
@Data
public class OssData {/*** 服务器域名*/private String host;/*** 上传文件路径*/private String path;/*** 上传文件名*/private String fileName;
}

OSS配置类:

import com.aliyun.oss.OSSClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** OSS配置类** @author CYY* @date 2022/4/15 16:20*/
@Configuration
public class OSSClientConfig {@Value("${oss.endpoint}")String endpoint;@Value("${oss.accessKey}")String accessKeyId;@Value("${oss.secretKey}")String accessKeySecret;// 创建OSS客户端Bean@Beanpublic OSSClient getOSSClient() {return new OSSClient(endpoint, accessKeyId, accessKeySecret);}
}

OSSUtil工具类:

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import javax.annotation.Resource;
import java.io.File;/*** 阿里OSS工具类** @author CYY* @date 2022/4/15 16:23*/
@Component
@Log4j2
public class AliyunOSSUtil {@Value("${oss.bucketname}")String bucketName;@Resourceprivate OSSClient client;/*** 上传文件*/public String upLoad(File file, String fileUrl) {log.info("------OSS文件上传开始--------" + file.getName());// 判断文件是否为空if (file == null) {return null;}try {// 判断容器是否存在,不存在就创建if (!client.doesBucketExist(bucketName)) {client.createBucket(bucketName);CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);client.createBucket(createBucketRequest);// 设置权限(公开读)client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);}// 上传文件PutObjectResult result = client.putObject(new PutObjectRequest(bucketName, fileUrl, file));if (result != null) {log.info("------OSS文件上传成功------" + fileUrl);return fileUrl;}} catch (OSSException oe) {log.error(oe.getMessage());} catch (ClientException ce) {log.error(ce.getErrorMessage());} finally {}return null;}
}

OSS上传接口类:

import org.springframework.web.multipart.MultipartFile;/*** @author CYY* @date 2022/4/15 16:42*/public interface OssUploadService {/*** 上传文件* @param file* @return*/String upload(MultipartFile file);
}

OSS上传接口实现类:

import jnpf.service.OssUploadService;
import jnpf.utils.AliyunOSSUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;/*** @author CYY* @date 2022/4/15 16:43*/
@Service
public class OssUploadServiceImpl implements OssUploadService {private  final AliyunOSSUtil aliyunOSSUtil;@Autowiredpublic OssUploadServiceImpl(AliyunOSSUtil aliyunOSSUtil){this.aliyunOSSUtil = aliyunOSSUtil;}@Value("${oss.filePath}")private String filePath;@Overridepublic String upload(MultipartFile file) {// 返回客户端文件系统中的原始文件名String fileName = file.getOriginalFilename();System.out.println(fileName);try{if (file != null) {// 判定文件名是否为 ""if (!"".equals(fileName.trim())) {File newFile = new File(fileName);FileOutputStream os = new FileOutputStream(newFile);// 以字节数组的形式返回文件的内容,再输出到文件输出流中os.write(file.getBytes());os.close();// 将接受的文件传输到给定的目标文件 file-->newFilefile.transferTo(newFile);// 根据不同文件 类型/日期 生成不同的文件夹Date date = new Date();//String datePath = DateUtils.formatDateByStyle(date, DatePattern.CN_DATE_BASIC_STYLE4.getDatePattern());String datePath = getCode().toString();String timeStamp = String.valueOf(System.currentTimeMillis());fileName = timeStamp + fileName.substring(fileName.lastIndexOf("."));String path;if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") || fileName.endsWith(".png")) {// imagespath = filePath + "/images/" + datePath + "/" + fileName;} else {path = filePath + "/other/" + datePath + "/" + fileName;}// 上传到OSSString uploadUrl = aliyunOSSUtil.upLoad(newFile, path);newFile.delete();if (uploadUrl != null) {return uploadUrl;}}}}catch (Exception e){e.printStackTrace();}return null;}/*** 生成编号** @return code*/private static Long getCode() {//生成当前时间戳的IDSimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String newDate = sdf.format(new Date());//生成5位随机数int randomNum = (int) ((Math.random() * 9 + 1) * 10000);String result = String.valueOf(randomNum);String s = newDate + result;Long code = Long.parseLong(s);return code;}}

OSS上传控制类:

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import jnpf.base.ActionResult;
import jnpf.entity.OssData;
import jnpf.service.OssUploadService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 阿里云OSS** @author CYY* @date 2022/4/15 16:53*/
@Api(tags = "阿里云OSS",value = "阿里云OSS")
@RestController
@RequestMapping("/api/file/oss")
public class OssUploadController {@Value("${oss.fileHost}")String fileHost;@Autowiredprivate OssUploadService ossUploadService;/*** 获取服务器的ip地址** @return*/@ApiOperation("获取服务器的ip地址")@GetMapping("getHost")public ActionResult getHost() {OssData ossData = new OssData();ossData.setHost(fileHost);return ActionResult.success(ossData);}/*** oss上传文件(单个文件上传)** @param file* @return*/@ApiOperation("oss上传文件(单个文件上传)")@PostMapping("fileUpload")public ActionResult fileUpload(@RequestParam("file") MultipartFile file) {OssData ossData = new OssData();// 上传文件返回urlString url = ossUploadService.upload(file);String fileName=url.substring(url.lastIndexOf("/")+1);if (url != null) {ossData.setHost(fileHost);ossData.setPath(fileHost + url);ossData.setFileName(fileName);return ActionResult.success(ossData);} else {return ActionResult.fail(300, "上传失败");}}/*** oss多文件上传** @param files* @return*/@ApiOperation("oss多文件上传")@PostMapping("filesUpload")public ActionResult filesUpload(@RequestParam("file") List<MultipartFile> files) {OssData ossData = new OssData();Map<String, String> urls = new HashMap<>();for (MultipartFile file : files) {String url = ossUploadService.upload(file);if (url != null) {String fileName = file.getOriginalFilename();url = fileHost + url;urls.put(fileName, url);} else {ossData.setFileName(file.getOriginalFilename());ossData.setPath(fileHost + url);return ActionResult.fail(100, ossData, "上传失败");}}return ActionResult.success(urls);}/*** oss 分俩个file,多文件上传** @param file01* @param file02* @return*/@ApiOperation("oss 分俩个file,多文件上传")@PostMapping("filesUploadMore")public ActionResult filesUploadMore(@RequestParam("file01") List<MultipartFile> file01, @RequestParam("file02") List<MultipartFile> file02) {OssData ossData = new OssData();Map<String, String> urls = new HashMap<>();for (MultipartFile file : file01) {try {String url = ossUploadService.upload(file);if (url != null) {String fileName = file.getOriginalFilename();url = fileHost + url;urls.put(fileName, url);} else {ossData.setFileName(file.getOriginalFilename());return ActionResult.fail(100, ossData, "上传失败");}} catch (Exception e) {e.printStackTrace();ossData.setFileName(file.getOriginalFilename());return ActionResult.fail(100, ossData, "上传失败");}}for (MultipartFile file : file02) {try {String url = ossUploadService.upload(file);if (url != null) {String fileName = file.getOriginalFilename();url = fileHost + url;urls.put(fileName, url);} else {ossData.setFileName(file.getOriginalFilename());return ActionResult.fail(100, ossData, "上传失败");}} catch (Exception e) {e.printStackTrace();ossData.setFileName(file.getOriginalFilename());return ActionResult.fail(100, ossData, "上传失败");}}return ActionResult.success(urls);}
}

工具类:

import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import jnpf.base.vo.PageListVO;
import jnpf.base.vo.PaginationVO;
import lombok.Data;import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author CYY* @date 2022/4/15 16:43*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ActionResult<T> {@ApiModelProperty("状态码")private Integer code;@ApiModelProperty("返回信息")private String msg;@ApiModelProperty("返回数据")private T data;public static ActionResult success() {ActionResult jsonData = new ActionResult();jsonData.setCode(200);jsonData.setMsg("Success");return jsonData;}public static ActionResult success(String msg) {ActionResult jsonData = new ActionResult();jsonData.setCode(200);jsonData.setMsg(msg);return jsonData;}public static ActionResult success(Object rows, PageModel pageModel) {ActionResult jsonData = new ActionResult();Map<String, Object> map = new HashMap<>(16);map.put("page", pageModel.getPage());map.put("records", pageModel.getRecords());map.put("rows", rows);map.put("total", pageModel.getTotal());jsonData.setData(map);jsonData.setCode(200);jsonData.setMsg("Success");return jsonData;}public static ActionResult success(Object object) {ActionResult jsonData = new ActionResult();jsonData.setData(object);jsonData.setCode(200);jsonData.setMsg("Success");return jsonData;}public static <T> ActionResult page(List<T> list, PaginationVO pagination) {ActionResult jsonData = new ActionResult();PageListVO<T> vo = new PageListVO<>();vo.setList(list);vo.setPagination(pagination);jsonData.setData(vo);jsonData.setCode(200);jsonData.setMsg("Success");return jsonData;}public static ActionResult success(String msg, Object object) {ActionResult jsonData = new ActionResult();jsonData.setData(object);jsonData.setCode(200);jsonData.setMsg(msg);return jsonData;}public static ActionResult fail(Integer code, String message) {ActionResult jsonData = new ActionResult();jsonData.setCode(code);jsonData.setMsg(message);return jsonData;}public static ActionResult fail(Integer code, Object object, String message) {ActionResult jsonData = new ActionResult();jsonData.setCode(code);jsonData.setData(object);jsonData.setMsg(message);return jsonData;}public static ActionResult fail(String msg, String data) {ActionResult jsonData = new ActionResult();jsonData.setMsg(msg);jsonData.setData(data);return jsonData;}public static ActionResult fail(String msg) {ActionResult jsonData = new ActionResult();jsonData.setMsg(msg);jsonData.setCode(400);return jsonData;}
}
import lombok.Data;import java.util.List;/*** @author CYY* @date 2022/4/15 16:43*/
@Data
public class PageListVO<T> {private List<T> list;PaginationVO pagination;}
import lombok.Data;/*** @author CYY* @date 2022/4/15 16:43*/
@Data
public class PaginationVO {private Long currentPage;private Long pageSize;private Integer total;
}

阿里云OSS上传文件并返回文件地址相关推荐

  1. SpringBoot整合阿里云OSS上传文件

    一.需求分析 文件上传是一个非常常见的功能,就是通过IO流将文件写到另外一个地方,这个地方可以是项目下的某个文件夹里,或者是本地电脑某个盘下面,还可以是云服务OSS里面,这里就是我要讲到的OSS,我写 ...

  2. 阿里云OSS上传文件时,如何显示上传网速

    阿里云OSS上传文件时,如何显示上传网速 业务场景 用户上传时,网速很慢,或者在上传大文件时,虽然有进度条,但是动的很慢,或者不明显,用户会产生困惑. 所以就产生了一个显示网速的需求点. 实现方式 E ...

  3. Java实现阿里云OSS上传文件

    推荐:前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.. 点击跳转到网站 1.准备工作:创建操作阿里云OSS许可证 阿里云官方文档 这里不再赘述,根据官方文档一步步的 ...

  4. thinkPHP 阿里云OSS 上传文件、直接下载

    阿里云OSS 上传文件.直接下载 1. 安装OSS SDK composer require aliyuncs/oss-sdk-php 2. thinkPHP接口 public function up ...

  5. 阿里云OSS上传文件设置请求头

    之前写过一篇发送文件消息的,原生input上传文件(聊天发送文件消息),这次的需求就是更改上传地址,使用阿里云OSS上传. 如果想了解阿里云对象存储OSS是如何使用的,请看阿里云存储对象OSS使用讲解 ...

  6. 使用阿里云OSS上传文件

    本文介绍如何利用Java API操作阿里云OSS对象存储. 1.控制台操作 首先介绍一下阿里云OSS对象存储的一些基本概念. 1.1 进入对象存储界面 登录阿里云账号,进入对象存储界面,如图所示. 进 ...

  7. SringBoot集成阿里云OSS上传文件

    上一篇文章讲了如何将文件从linux同步到阿里云的oss有兴趣的小伙伴可以去看看,这篇文章讲述如何将文件上传到阿里云oss上,本文只详细写出后端java代码示例,前端和无用代码都会省略,可以上传文件, ...

  8. 阿里云OSS上传文件以及获取文件

    1.新建bucket (文件存储空间名称),bucket下也可以继续创建目录 2.通过短信验证码创建accessKey,保存accessKeyID和accessKeySecret: 3.添加oss管理 ...

  9. ThinkPHP3.2 实现阿里云OSS上传文件

    为什么80%的码农都做不了架构师?>>>    0.配置文件Config,加入OSS配置选项,设置php.ini最大上传大小(自行解决,这里不做演示) 'OSS' => arr ...

最新文章

  1. 利用Travis CI 让你的github项目持续构建(Node.js为例)
  2. css3滤镜Filter使用
  3. 当 Vue 处理数组与处理纯对象的方式一样
  4. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】
  5. 概率图模型中信念传播
  6. android cmake 打印_Android使用CMAKE编译libjpeg
  7. 光功率 博科交换机_如何将交换机40G QSFP+与10G SFP+端口互连?
  8. System.Net.Mail和System.Web.Mail
  9. zabbix监控系统时间的问题
  10. Linux中的终端、控制台、tty、pty等概念
  11. 关于树的父子节点的图形化展示
  12. 20135320赵瀚青LINUX内核分析第一周学习笔记
  13. 搜索c盘大文件_硬核干货,如何给c盘“减肥”?
  14. DOS窗口查找电脑端口占用情况
  15. 学习数据库系统概念,设计及应用心得
  16. 马尔可夫------马尔可夫不等式
  17. java给手机发短信_java web 项目向手机发送短信
  18. 怎么看神经网络过早收敛_你的神经网络真的收敛了么?
  19. springMVC中json转换器的配置
  20. 基于Python进行餐饮行业订单表的数据分析

热门文章

  1. 星际争霸php,php设计模式之原型模式分析【星际争霸游戏案例】
  2. React全家桶项目搭建
  3. 什么是CLOS架构?
  4. BBB学习(十八):cape介绍(一)DeviceTree
  5. 唯一一个能让盖茨晕倒的中国人...
  6. 树莓派 Pi Camera: out of resorce error
  7. python制作小人,[Python设计模式] 第13章 造小人——建造者模式
  8. nginx rewrite break
  9. DWORD *类型的实参与SIZE_T *类型的形参不兼容,求指教
  10. Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 具体解释