controller:
注:纯文件上传与配合下载的文件上传代码是相同的,改变接口名即可使用,只是service的返回值不同而已。
@Resource
OssFileService ossFileService;
//上传的代码
@PostMapping("/xxx")
public String fileServiceUpload(@RequestParam(name = "file") MultipartFile file) throws IOException {
log.info("upload upload start... ");
String originalFilename = file.getOriginalFilename();
String[] split = originalFilename.split("\\.");
File tempFile = File.createTempFile(split[0], "." + split[1]);
file.transferTo(tempFile);
String result = "";
try {
String fileName = ossFileService.fileServiceUpload(tempFile);
//删除临时文件
tempFile.delete();
if (!StringUtils.isBlank(fileName)) {
return fileName;
} else {
result = "上传失败";
}
} catch (Exception e) {
result = "系统异常";
}
return result;
}
//下载的代码
@PostMapping("/xxx")
public File fileDownLoad(@RequestBody String fileName) throws IOException {
JSONObject jsonObject = JSON.parseObject(fileName);
String fileName1 = (String) jsonObject.get("fileName");
return ossFileService.fileDownload(fileName1);
}
OssFileService:
String fileUpload(File file); //纯文件上传,返回一个供前端使用的url
File fileDownload(String fileName) throws IOException; //文件下载到本地
String fileServiceUpload(File file); //配合文件下载使用的文件上传
OssFileServiceImpl:
@Service
public class OssFileServiceImpl implements OssFileService {
private static final String accessKeyId = "你的阿里云的accessKeyId";
private static final String accessKeySecret = "你的阿里云的accessKeySecret";
private static final String bucket = "你的阿里云的bucket";
private static final String endPoint = "你的阿里云的endPoint";
@Override
public String fileUpload(File file){
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
try {
//调用oss的putObject方法实现上传
//第一个参数 Bucket名称
//第二个参数,上传到oss文件路径和文件名称 A/B/图片.jpg
//第三个参数,上传文件输入流
//获取文件名称
String fileName = file.getName();
//1.文件名称添加一个唯一值
String uuid = UUID.randomUUID().toString().replace("-", "");
fileName = uuid + fileName;
//2.把文件安装日期进行分类
//2021/05/20/图片.jpg
//获取当前日期 joda-time
Date date = new Date();
String datePath = new SimpleDateFormat("yyyy/MM/dd").format(date);
fileName = datePath + "/" + fileName;
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, fileName, file);
//上传文件
ossClient.putObject(putObjectRequest);
// 关闭OSSClient。
ossClient.shutdown();
//上传之后把文件路径返回
String url = "https://" + bucket + "." + endPoint + "/" + fileName;
return url;
} catch (Exception e) {
return null;
}
}
@Override
public File fileDownload(String fileName) throws IOException {
File template = null;
String[] split = fileName.split("\\.");
template = File.createTempFile(split[0], split[1]);
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
// 下载Object到本地文件,并保存到指定的本地路径中。如果指定的本地文件存在会覆盖,不存在则新建。
ossClient.getObject(new GetObjectRequest(bucket, fileName),template);
// 关闭OSSClient。
ossClient.shutdown();
return template;
}
@Override
public String fileServiceUpload(File file) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
try {
//调用oss的putObject方法实现上传
//第一个参数 Bucket名称
//第二个参数,上传到oss文件路径和文件名称 A/B/图片.jpg
//第三个参数,上传文件输入流
//获取文件名称
String fileName = file.getName();
//1.文件名称添加一个唯一值
String uuid = UUID.randomUUID().toString().replace("-", "");
fileName = uuid + fileName;
//2.把文件安装日期进行分类
//2021/05/20/图片.jpg
//获取当前日期 joda-time
Date date = new Date();
String datePath = new SimpleDateFormat("yyyy/MM/dd").format(date);
fileName = datePath + "/" + fileName;
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, fileName, file);
//上传文件
ossClient.putObject(putObjectRequest);
// 关闭OSSClient。
ossClient.shutdown();
//返回文件名以便后续下载使用
return fileName;
} catch (Exception e) {
return null;
}
}
}
测试
通过postman form-data去测上传
通过postman raw传json去测下载
**官方java sdk文档地址:**https://help.aliyun.com/document_detail/32007.html
版权声明:本文为ls_wifi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。