@Component
@Slf4j(topic = “AliyunOSSUtil”)
public class AliyunOSSUtil {
@Autowired
private AliyunConfig aliyunConfig;
/**
* 阿里云上传文件
*
* @param file 文件
* @return FileDTO
*/
public FileDTO upLoad(MultipartFile file) throws IOException {
log.info("------OSS文件上传开始--------" + file.getName());
BufferedImage sourceImg = ImageIO.read(file.getInputStream());
Double height = (double) sourceImg.getHeight();
Double width = (double) sourceImg.getWidth();
String endpoint = aliyunConfig.getEndpoint();
System.out.println("获取到的Point为:" + endpoint);
String accessKeyId = aliyunConfig.getAccessKeyId();
String accessKeySecret = aliyunConfig.getAccessKeySecret();
String bucketName = aliyunConfig.getBucketName();
String fileHost = aliyunConfig.getFolder();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = format.format(new Date());
String uuid = UUID.randomUUID().toString().replace("-", "");
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);
try {
// 判断容器是否存在,不存在就创建
if (!client.doesBucketExist(bucketName)) {
client.createBucket(bucketName);
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
client.createBucket(createBucketRequest);
}
// 设置文件路径和名称
String fileUrl = fileHost + "/" + (dateStr + "/" + uuid) + "-" + file.getOriginalFilename();
// 上传文件
// PutObjectResult result = client.putObject(new PutObjectRequest(bucketName, fileUrl, file));
PutObjectResult result = client.putObject(bucketName, fileUrl, new ByteArrayInputStream(file.getBytes()));
log.info(“result” + result);
// 设置权限(公开读)
client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
if (result != null) {
System.out.println(result);
log.info("------OSS文件上传成功------" + fileUrl);
return new FileDTO(
file.getSize(),//文件大小
fileUrl,//文件的绝对路径
aliyunConfig.getWebUrl() + "/" + fileUrl,//文件的web访问地址
suffix,//文件后缀
"",//存储的bucket
bucketName,//原文件名
fileHost,//存储的文件夹
height, // 文件高度
width // 文件宽度
);
}
} catch (OSSException oe) {
log.error(oe.getMessage());
} catch (ClientException ce) {
log.error(ce.getErrorMessage());
} finally {
if (client != null) {
client.shutdown();
}
}
return null;
}
/**
* 删除文件
*
* @param fileKey 文件唯一标识
* @return Result
*/
public Result delete(String fileKey) {
log.info("===========>OSS文件删除");
String endpoint = aliyunConfig.getEndpoint();
System.out.println("获取到的Point为:" + endpoint);
String accessKeyId = aliyunConfig.getAccessKeyId();
String accessKeySecret = aliyunConfig.getAccessKeySecret();
String bucketName = aliyunConfig.getBucketName();
// String fileHost = aliyunConfig.getFolder();
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
try {
if (!ossClient.doesBucketExist(bucketName)) {
log.info("=>bucket不存在");
return new Result().ok(“你的bucket不存在”);
} else {
log.info("=>开始删除");
ossClient.deleteObject(bucketName, fileKey);
log.info("===========>删除成功");
return new Result().ok(“删除成功” + fileKey);
}
} catch (Exception e) {
log.info(“删除失败” + e);
return new Result().ok(“删除失败”);
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
@RestController
@Api(value = “API - FileUploadController”, description = “文件”)
@Slf4j(topic = “FileUploadController”)
public class FileUploadController {
@Autowired
private AliyunOSSUtil aliyunOSSUtil;
/**
* 阿里云文件上传
*
* @param file
* @return
*/
@ApiOperation(value = "文件上传")
@PostMapping(value = "/menu/uploadFile")
public Result uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
log.info("文件上传");
/*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.transferTo(newFile);
// 上传到OSS
return new Result().ok(aliyunOSSUtil.upLoad(newFile));
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;*/
return new Result().ok(aliyunOSSUtil.upLoad(file));
}
/**
* 阿里云文件删除
*
* @param fileKey 文件唯一标识
* @return Result
*/
@ApiOperation(value = "文件删除")
@ApiImplicitParams({
@ApiImplicitParam(name = "fileKey", value = "文件标识", dataType = "String")})
@DeleteMapping(value = "/menu/deleteFile")
public Result deleteFile(@RequestParam(value = "fileKey") String fileKey) {
return aliyunOSSUtil.delete(fileKey);
}
}