当前位置:   article > 正文

Vue elementUI上传文件到OSS服务器,后端(java)(配图文)_elementui文件上传后端

elementui文件上传后端

OSS配置


首先去阿里云官网,开通并配置OSS服务

进入对象存储OSS,创建一个Bucket(记录下Endpoint,后端配置连接OSS时会使用到)

在新创建的Bucket中测试上传文件是否可用

前往阿里云的访问控制新建一个子用户

注意:

子用户创建成功切记复制AccessKey IDAccessKey Secret

并保存起来,否则退出后无法再获取到这些信息。只能重新创建新的子用户。

创建完成后,为该子用户添加权限

到这一步,OSS服务就算开通完毕了。

后端配置


接下来是java的后端的配置以及与OSS服务器的连接了。

pom.xml添加以下依赖

  1. <aliyun.oss.version>3.8.0</aliyun.oss.version>
  2. <jodatime.version>2.10.1</jodatime.version>
  3. <!--日期时间工具-->
  4. <dependency>
  5. <groupId>joda-time</groupId>
  6. <artifactId>joda-time</artifactId>
  7. <version>${jodatime.version}</version>
  8. </dependency>
  9. <!--aliyunOSS-->
  10. <dependency>
  11. <groupId>com.aliyun.oss</groupId>
  12. <artifactId>aliyun-sdk-oss</artifactId>
  13. <version>${aliyun.oss.version}</version>
  14. </dependency>

在配置文件application.yaml中配置OSS属性

  1. config:
  2. oss:
  3. endpoint: oss-cn-hangzhou.aliyuncs.com
  4. keyid: 存放前面创建子用户的参数AccessKey ID
  5. keysecret: 存放前面创建子用户的参数AccessKey Secret
  6. #bucket可以在控制台创建,也可以使用java代码创建
  7. bucketname: 存放所创建的Bucket名称

接下来创建配置类

  1. @Data
  2. @Component
  3. @ConfigurationProperties(prefix="config.oss")
  4. publicclassOssConfig {
  5. privateStringendpoint;
  6. privateStringkeyid;
  7. privateStringkeysecret;
  8. privateStringbucketname;
  9. }

添加service的实现类

  1. @Service
  2. publicclassFileServiceImpl{
  3. @Autowired
  4. privateOssConfigossConfig;
  5. publicStringupload(InputStreaminputStream, Stringmodule, StringoriginalFilename) {
  6. // 获得oss 服务器的信息
  7. Stringendpoint=ossConfig.getEndpoint();
  8. Stringkeyid=ossConfig.getKeyid();
  9. Stringkeysecret=ossConfig.getKeysecret();
  10. Stringbucketname=ossConfig.getBucketname();
  11. //判断oss实例是否存在:如果不存在则创建,如果存在则获取
  12. OSSossClient=newOSSClientBuilder().build(endpoint, keyid, keysecret);
  13. if (!ossClient.doesBucketExist(bucketname)) {
  14. //创建bucket
  15. ossClient.createBucket(bucketname);
  16. //设置oss实例的访问权限:公共读
  17. ossClient.setBucketAcl(bucketname, CannedAccessControlList.PublicRead);
  18. }
  19. //构建日期路径:avatar/2020/08/11/文件名
  20. Stringfolder=newDateTime().toString("yyyy/MM/dd");
  21. //文件名:uuid.扩展名
  22. StringfileName=UUID.randomUUID().toString();
  23. StringfileExtension=originalFilename.substring(originalFilename.lastIndexOf("."));
  24. Stringkey=module+"/"+folder+"/"+fileName+fileExtension;
  25. //文件上传至阿里云
  26. ossClient.putObject(ossConfig.getBucketname(), key, inputStream);
  27. // 关闭OSSClient。
  28. ossClient.shutdown();
  29. //返回url地址
  30. return"https://"+bucketname+"."+endpoint+"/"+key;
  31. }
  32. }

最后进行测试

  1. @ApiOperation("文件上传")
  2. @PostMapping("/upload")
  3. publicRupload(
  4. @ApiParam(value="文件", required=true)
  5. @RequestParam("file") MultipartFilefile,
  6. @ApiParam(value="模块", required=true)
  7. @RequestParam("module") Stringmodule) throwsIOException {
  8. // 获得上传文件的 InputStream
  9. InputStreaminputStream=file.getInputStream();
  10. // 获得上传文件的名字
  11. StringoriginalFilename=file.getOriginalFilename();
  12. StringuploadUrl=fileService.upload(inputStream, module, originalFilename);
  13. //返回r对象
  14. returnnewR(ResponseEnum.SUCCESS,uploadUrl);
  15. }

在swagger上进行测试

到这里后端测试完毕。

前端配置


前端采用vue实现

  1. // 文件上传组件
  2. // http://localhost:8100/upload?module=avatar 路径为后端上传文件的接口
  3. <el-uploadclass="avatar-uploader"action="http://localhost:8100/upload?module=avatar"
  4. :show-file-list="false"
  5. :on-success="handleAvatarSuccess"
  6. :before-upload="beforeAvatarUpload">
  7. <imgv-if="imageUrl"
  8. :src="imageUrl"
  9. class="avatar">
  10. <iv-else
  11. class="el-icon-plus avatar-uploader-icon"></i>
  12. </el-upload>
  1. // method中的方法
  2. // 上传成功后
  3. handleAvatarSuccess (res, file) {
  4. this.imageUrl = URL.createObjectURL(file.raw);
  5. // 可能URL.createObjectURL(file.raw);会出现路径错误
  6. // 可以替换为:this.imageUrl = res.data;
  7. },
  8. beforeAvatarUpload (file) {
  9. const isJPG = file.type === 'image/png';
  10. const isLt2M = file.size / 1024 / 1024 <2;
  11. if(!isJPG){
  12. this.$message.error('上传头像图片只能是 png 格式!');
  13. }
  14. if(!isLt2M){
  15. this.$message.error('上传头像图片大小不能超过 2MB!');
  16. }
  17. returnisJPG&&isLt2M;
  18. },

到这里elementUI上传文件到OSS服务器就基本完成了。

记得点赞,收藏,关注!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号