这边博文实际上想要展现的是一个文件上传阿里OSS的工具类,但是过程是完全实现一个公司根据业务需求去开发实现上传的一个业务需求,综合比较其他博文,这篇博文可能比较罗嗦点.所以根据自身需求来决定是否需要借用此篇博客.
开发工具idea + maven + postman(用来作为测试工具)
开发环境jdk 1.8 + SpringBoot + maven(jar包管理)
jar包版本:2.8.2
OSS-初始化OSSClientcom.aliyun.oss aliyun-sdk-oss 2.8.2
生成一个已经配置好的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;
@Configuration
public class OSSClientConfig {
@Value("${oss.endpoint}")
String endpoint;
@Value("${oss.keyid}")
String accessKeyId;
@Value("${oss.keysecret}")
String accessKeySecret;
// 创建OSS客户端Bean
@Bean
public 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;
@Component
@Log4j2
public class AliyunOSSUtil {
@Value("${oss.bucketname}")
String bucketName;
@Resource
private 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;
}
}
业务功能实现
- 获取服务器域名网址
- 单文件上传
- 多文件上传
import org.springframework.web.multipart.MultipartFile;
public interface OssUploadService {
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;
@Service
public class OssUploadServiceImpl implements OssUploadService {
private final AliyunOSSUtil aliyunOSSUtil;
@Autowired
public OssUploadServiceImpl(AliyunOSSUtil aliyunOSSUtil){
this.aliyunOSSUtil = aliyunOSSUtil;
}
@Value("${oss.filePath}")
private String filePath;
@Override
public 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-->newFile
file.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")) {
// images
path = filePath + "images/" + datePath + "/" + fileName;
} else {
path = filePath + "other/" + datePath + "/" + fileName;
}
// 上传到OSS
String 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;
@RestController
@Scope("prototype")
@RequestMapping("oss")
public class OssUploadController {
private final OssUploadService ossUploadService;
@Value("${oss.fileHost}")
String fileHost;
@Autowired
public OssUploadController(OssUploadService ossUploadService) {
this.ossUploadService = ossUploadService;
}
@GetMapping("getHost")
public AjaxResult getHost() {
OssData ossData = new OssData();
ossData.setHost(fileHost);
return AjaxResult.AjaxSuccess(ossData);
}
@PostMapping("fileUpload")
public AjaxResult fileUpload(@RequestParam("file") MultipartFile file) {
OssData ossData = new OssData();
// 上传文件返回url
String url = ossUploadService.upload(file);
if (url != null) {
ossData.setHost(fileHost);
ossData.setPath(fileHost + url);
return AjaxResult.AjaxSuccess(ossData);
} else {
return AjaxResult.AjaxError(300, "上传失败");
}
}
@PostMapping("filesUpload")
public AjaxResult filesUpload(@RequestParam("file") List files) {
OssData ossData = new OssData();
Map 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);
}
@PostMapping("filesUploadMore")
public AjaxResult filesUploadMore(@RequestParam("file01") List file01, @RequestParam("file02") List file02) {
OssData ossData = new OssData();
Map 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);
}
}
Postman测试结果



