谷粒学院64——头像上传功能的实现
接下来写下service和controller。编写service的过程不需要刻意记忆,只需要查阅官网文档改写即可。
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadFileAvatar(MultipartFile file) {
//工具类获取值
String endpoint = ConstantPropertiesUtils.END_POINT;
String accessKeyId = ConstantPropertiesUtils.KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
try {
// 创建OSS实例
OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);
// 获取文件的输入流
InputStream inputStream = file.getInputStream();
String fileName = file.getOriginalFilename();
// 调用oss的方法
ossClient.putObject(bucketName, fileName, inputStream);
ossClient.shutdown();
// 拼接url 格式:https://edu-banjiu.oss-cn-hangzhou.aliyuncs.com/default.gif
String url = "http://"+bucketName+"."+endpoint+"/"+fileName ;
return url;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
@RestController
@CrossOrigin
@EnableSwagger2
@RequestMapping("eduoss/fileoss")
public class OssController {
@Autowired
private OssService ossservice;
// 上传头像
@PostMapping
public R uploadOssFile(MultipartFile file){
String url = ossservice.uploadFileAvatar(file);
return R.ok().data("url", url);
}
}
在网页输入Swagger UI进行测试。在oss控制台查看文件是否上传成功,请读者自测。
功能实现了,但是还存在问题,请读者设想:
(1)如果多次上传同名文件,岂不是就会出现文件覆盖的情况。在文件名上添加一个随机值。
String uuid = UUID.randomUUID().toString();
fileName = uuid + fileName;
(2)如果文件很多,都在同一目录,也太不方便管理了,因此我们需要分日期对文件进行分文件夹管理。
//org.joda.time.DateTime;
String path = new DateTime().toString("yyyy/MM/dd");
fileName = path + "/" +fileName;
结果如下图。
java全栈日日学 文章被收录于专栏
java全栈每日必学,不要高估自己一年能做的事,不要低估自己十年能做的事