前言简介

​ 这边博文实际上想要展现的是一个文件上传阿里OSS的工具类,但是过程是完全实现一个公司根据业务需求去开发实现上传的一个业务需求,综合比较其他博文,这篇博文可能比较罗嗦点.所以根据自身需求来决定是否需要借用此篇博客.

开发工具

idea + maven + postman(用来作为测试工具)

开发环境

jdk 1.8 + SpringBoot + maven(jar包管理)

jar包版本:2.8.2

<!--阿里云oss存储-->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.2</version>
</dependency>

OSS-初始化OSSClient

生成一个已经配置好的OSSClient对象

endpoint: 带有地域节点的请求地址

keyid: 阿里云用户id

keysecret:阿里云用户密码

oss.endpoint = oss-cn-shanghai.aliyuncs.com
oss.keyid= *********
oss.keysecret= *********
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 chenpengfei*/
@Configuration
public class OSSClientConfig {@Value("${oss.endpoint}")String endpoint;@Value("${oss.keyid}")String accessKeyId;@Value("${oss.keysecret}")String accessKeySecret;// 创建OSS客户端Bean@Beanpublic OSSClient getOSSClient() {return new OSSClient(endpoint, accessKeyId, accessKeySecret);}
}

OSS-上传工具类

bucketname: 阿里云存储空间名

fileHost: 阿里服务器的域名

filePath: 上传文件路径

oss.bucketname = xxxxxx
oss.fileHost= xxxxxx
oss.filePath= upload
package com.gd.common.utils.oss;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上传服务*/
@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;}
}

业务功能实现

  • 获取服务器域名网址
  • 单文件上传
  • 多文件上传

service

import org.springframework.web.multipart.MultipartFile;public interface OssUploadService {/*** 上传文件* @param file* @return*/String upload(MultipartFile file);
}

impl

package com.maoni.ssmtest.service.impl;import com.maoni.ssmtest.service.OssUploadService;
import com.maoni.ssmtest.utils.date.DatePattern;
import com.maoni.ssmtest.utils.date.DateUtils;
import com.maoni.ssmtest.utils.aliOSSUtil.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.util.Date;/*** @author ouj*/@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 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;}
}

controller

import com.maoni.ssmtest.domain.OssData;
import com.maoni.ssmtest.service.OssUploadService;
import com.maoni.ssmtest.utils.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author ouj*/
@RestController
@Scope("prototype")
@RequestMapping("oss")
public class OssUploadController {private final OssUploadService ossUploadService;@Value("${oss.fileHost}")String fileHost;@Autowiredpublic OssUploadController(OssUploadService ossUploadService) {this.ossUploadService = ossUploadService;}/*** 获取服务器的ip地址* @return*/@GetMapping("getHost")public AjaxResult getHost() {OssData ossData = new OssData();ossData.setHost(fileHost);return AjaxResult.AjaxSuccess(ossData);}/*** oss上传文件(单个文件上传)* @param file* @return*/@PostMapping("fileUpload")public AjaxResult fileUpload(@RequestParam("file") MultipartFile file) {OssData ossData = new OssData();// 上传文件返回urlString url = ossUploadService.upload(file);if (url != null) {ossData.setHost(fileHost);ossData.setPath(fileHost + url);return AjaxResult.AjaxSuccess(ossData);} else {return AjaxResult.AjaxError(300, "上传失败");}}/*** oss多文件上传* @param files* @return*/@PostMapping("filesUpload")public AjaxResult 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 AjaxResult.AjaxError(100, ossData, "上传失败");}}return AjaxResult.AjaxSuccess(urls);}/*** oss 分俩个file,多文件上传* @param file01* @param file02* @return*/@PostMapping("filesUploadMore")public AjaxResult 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 AjaxResult.AjaxError(100, ossData, "上传失败");}} catch (Exception e) {e.printStackTrace();ossData.setFileName(file.getOriginalFilename());return AjaxResult.AjaxError(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 AjaxResult.AjaxError(100, ossData, "上传失败");}} catch (Exception e) {e.printStackTrace();ossData.setFileName(file.getOriginalFilename());return AjaxResult.AjaxError(100, ossData, "上传失败");}}return AjaxResult.AjaxSuccess(urls);}
}

OssData 封装类(服务器域名+上传文件路径+上传文件名)

/*** @author ouj*/
@Data
public class OssData {/*** 服务器域名*/private String host;/*** 上传文件路径*/private String path;/*** 上传文件名*/private String fileName;
}

Postman测试结果

Java实现文件上传阿里OSS相关推荐

  1. vue+el-upload组件封装(图片,文件上传至oss阿里云)

    1.安装ali-oss npm install ali-oss --save 2.oss方法封装 新建utils/ali-oss-upload.js文件(代码如下) const OSS = requi ...

  2. 图片上传之后清空_OSS文件上传及OSS与ODPS之间数据连通

    场景描述 有这样一种场景,用户在自建服务器上存有一定数量级的CSV格式业务数据,某一天用户了解到阿里云的OSS服务存储性价比高(嘿嘿,颜值高),于是想将CSV数据迁移到云上OSS中,并且未来还想对这些 ...

  3. java多文件上传plupload控件实现多图片上传(二)

    接上篇 java多文件上传plupload控件实现多图片上传(一) 续写PluploadUtil 和 Plupload PO类,以及后台的action. 至此,可实现多文件上传功能. 上传文件Acti ...

  4. JAVA大文件上传断点续传解决方案

    JAVA大文件上传断点续传解决方案 参考文章: (1)JAVA大文件上传断点续传解决方案 (2)https://www.cnblogs.com/songsu/p/11834425.html (3)ht ...

  5. java jsp 文件上传_用JSP编写文件上传

    用JSP编写文件上传 发布时间:2016-09-14 来源: 点击: 次 如果你曾用VB编写文件上传的组件的话,那么用JAVA编写文件上传的JAVABEAN十分容易. 下面的例子只是一个简版 pack ...

  6. centos nfs java_CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  7. Java 多文件上传

    转载自  Java 多文件上传 前台代码很简单: <input type="file" accept=".zip" class="file-lo ...

  8. 文件上传 java 完美,vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData())...

    vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData()) 地址:https://www.cnblogs.com/muscles ...

  9. Java实现文件上传到服务器(FTP方式)

    Java实现文件上传到服务器(FTP方式) 1,jar包:commons-net-3.3.jar 2,实现代码: //FTP传输到数据库服务器private boolean uploadServerB ...

最新文章

  1. 知识图谱实体链接是什么?一份“由浅入深”的综述
  2. Dedesql数据库类详解(二次开发必备教程)(转)
  3. 年薪15W的程序员因为掌握这个技能,薪资翻倍!
  4. python火柴人打架代码_python火柴人
  5. 第一:Postman安装及使用(超详细)
  6. 前端解析ipa、apk安装包信息 —— app-info-parser
  7. 小辣椒android密码怎样开,小辣椒手机忘记密码怎么恢复出厂设置
  8. docker compose启动服务超时重启记录
  9. 局域网聊天服务器(openfire)安装与配置
  10. C/C++[codeup 1397,2020]查找
  11. Modbus调试软件使用教程
  12. python如何实现数据可视化,如何用python做可视化
  13. Hadoop的特性和版本
  14. 今日睡眠质量记录70分
  15. Android亮屏和熄屏控制
  16. LDA and QDA
  17. QT自定义窗口,可拉伸
  18. 熊市赚取被动收入:质押NFT带来高达30%收益回报!
  19. CS229part3广义线性模型
  20. Android学习 - 百度地图开发基础

热门文章

  1. 【Springboot】Json转换工具
  2. 国际物流行业拓客的10个经典方法
  3. 达观数据新用户推荐的三大利器
  4. Fzu 2202 犯罪嫌疑人【逻辑推理思维题】好题!
  5. java.util.ConcurrentModificationExceptionat java.util.ArrayList$Itr.checkForComodification
  6. VScode行内样式提醒,补全插件
  7. 从唐僧师徒四人性格特点看团队结构的组成
  8. 骑士游历问题(C语言代码)
  9. 哈啰出行的商业版图,早已不止是车
  10. AGV机器人安全传感器主要供应商