最近写练习的时候要用到文件的增删改查操作,听oss对象存储特别牛逼,我就想试一下。我去了华为云和阿里云看了一下价格,感觉还是阿里云的比较便宜,腾讯云就不考虑了,因为腾讯封了我的qq号,我的武则天都玩不了。首先我去看了一下文档,我靠,我发现我的水平有些低,感觉迷茫。我想我不如去csdn上找一个来抄了,于是想罢我就在csdn搜索栏里输入了springboot oss,
于是出来了这,然后我就看了第一个,好,点开看看,首先看了他的文章,明白了他的思路:
1.就是将阿里云依赖导入
2.然后用表单将文件提交到java服务器端
3.用文件上传方法上传
我看了一下大概思路就这些,我就想着不如直接抄。
1.首先我们创建一个项目添加如下依赖
因为我这里采用的是java11版本所以使用这个依赖,和照着抄的文章还是有点区别
2.在配置文件中添加下面配置
这里需要注意的是与原文对比需要配置上传文件大小,因为springboot默认配置太小,容易报错。
accesskey和Accesssecret在这里按照提示配置即可,但要注意阿里云的提醒账号创建权限赋予问题(没有权限一样会报错):
bucket在这里配置:
3.将配置文件的oss信息,读取并自动封装成实体类
4.具体上传和删除方法
与原文不同的是这里使用这个方法
业务代码如下:
@Autowired private ConstantProperties constantProperties; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); /** * 上传 * @param file * @return */ public String upload(InputStream file,String name){ String endpoint= constantProperties.getEndpoint(); String accessKeyId= constantProperties.getKeyid(); String accessKeySecret=constantProperties.getKeysecret(); String bucketName=constantProperties.getBucketname(); String fileHost=constantProperties.getFilehost(); System.out.println(endpoint+"endpoint"); String dateStr = format.format(new Date()); if(null == file){ return null; } OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret); try { //容器不存在,就创建 if(! ossClient.doesBucketExist(bucketName)){ ossClient.createBucket(bucketName); CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName); createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead); ossClient.createBucket(createBucketRequest); } //创建文件路径 String fileUrl = fileHost+"/"+(dateStr + "/" + UUID.randomUUID().toString().replace("-","")+"-"+name); //上传文件 PutObjectResult result = ossClient.putObject(bucketName, fileUrl, file); //设置权限 这里是公开读 ossClient.setBucketAcl(bucketName,CannedAccessControlList.PublicRead); if(null != result){ return fileUrl; } }catch (OSSException oe){ System.out.println(oe.getMessage()); }catch (ClientException ce){ System.out.println(ce.getMessage()); }finally { //关闭 ossClient.shutdown(); } return null; } /** * 删除 * @param fileKey * @return */ public String deleteBlog(String fileKey){ String endpoint= constantProperties.getEndpoint(); String accessKeyId= constantProperties.getKeyid(); String accessKeySecret=constantProperties.getKeysecret(); String bucketName=constantProperties.getBucketname(); String fileHost=constantProperties.getFilehost(); try { OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret); if(!ossClient.doesBucketExist(bucketName)){ return "您的Bucket不存在"; }else { ossClient.deleteObject(bucketName,fileKey); return "==============>Object删除成功:"+fileKey; } }catch (Exception ex){ return "删除Object失败"; } }
5.控制层
这里原文是先创建一个文件,然后将文件提交,我个人感觉这样不好看,所以我这里用了上面的文件上传方法,这里传入的是文件流和名字。
@Controller @RequestMapping("/oss") public class UploadController { @Autowired private Upload upload; @GetMapping("/toUploadBlog") public String toUploadBlog(){ return "/upload"; } @PostMapping("/toUploadBlog") public String toUploadBlogPost(MultipartFile file){ String name=file.getOriginalFilename(); try { if(null != file){ String filename = file.getOriginalFilename(); if(!"".equals(filename.trim())){ String uploadUrl = upload.upload(file.getInputStream(),name); } }else { } }catch (Exception ex){ ex.printStackTrace(); } return "/index"; } @GetMapping("/delete") @ResponseBody public String deleteBlog(@RequestParam("key")String key){ upload.deleteBlog(key); return "删除成功"; } }
6.这里就用的是原文的页面
6.运行
1.上传
2.查看
点击图片详情可以看出该链接是由http协议+bucket+文件路径组成
3.删除