阿里云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
-
#阿里云用户id
-
accessKey: 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
-
*/
-
-
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
-
*/
-
-
public class OSSClientConfig {
-
-
-
String endpoint;
-
-
String accessKeyId;
-
-
String accessKeySecret;
-
-
// 创建OSS客户端Bean
-
-
public 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
-
*/
-
-
-
public class AliyunOSSUtil {
-
-
String bucketName;
-
-
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;
-
}
-
}
-
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
-
*/
-
-
public class OssUploadServiceImpl implements OssUploadService {
-
-
private final AliyunOSSUtil aliyunOSSUtil;
-
-
-
public OssUploadServiceImpl(AliyunOSSUtil aliyunOSSUtil){
-
this.aliyunOSSUtil = aliyunOSSUtil;
-
}
-
-
-
private String filePath;
-
-
-
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 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")) {
-
// 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;
-
}
-
-
/**
-
* 生成编号
-
*
-
* @return code
-
*/
-
private static Long getCode() {
-
//生成当前时间戳的ID
-
SimpleDateFormat 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
-
*/
-
-
-
-
public class OssUploadController {
-
-
-
String fileHost;
-
-
-
private OssUploadService ossUploadService;
-
-
/**
-
* 获取服务器的ip地址
-
*
-
* @return
-
*/
-
-
-
public ActionResult getHost() {
-
OssData ossData = new OssData();
-
ossData.setHost(fileHost);
-
return ActionResult.success(ossData);
-
}
-
-
/**
-
* oss上传文件(单个文件上传)
-
*
-
* @param file
-
* @return
-
*/
-
-
-
public ActionResult fileUpload( { MultipartFile file)
-
OssData ossData = new OssData();
-
// 上传文件返回url
-
String 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
-
*/
-
-
-
public ActionResult filesUpload( { 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
-
*/
-
-
-
public ActionResult filesUploadMore( { List<MultipartFile> file01, 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
-
*/
-
-
-
public class ActionResult<T> {
-
-
-
private Integer code;
-
-
-
private String msg;
-
-
-
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
-
*/
-
-
public class PageListVO<T> {
-
private List<T> list;
-
PaginationVO pagination;
-
-
}
-
import lombok.Data;
-
-
/**
-
* @author CYY
-
* @date 2022/4/15 16:43
-
*/
-
-
public class PaginationVO {
-
private Long currentPage;
-
private Long pageSize;
-
private Integer total;
-
}
转自:https://blog.csdn.net/HellocWood/article/details/124836732