实现 文件上传【头像/图片】

打印 上一主题 下一主题

主题 902|帖子 902|积分 2706

实现 文件上传【头像/图片】

浏览器---->后端服务----->阿里云OSS
工具类
  1. @Data
  2. @AllArgsConstructor
  3. @Slf4j
  4. public class AliOssUtil {
  5.     private String endpoint;
  6.     private String accessKeyId;
  7.     private String accessKeySecret;
  8.     private String bucketName;
  9.     /**
  10.      * 文件上传
  11.      *
  12.      * @param bytes
  13.      * @param objectName
  14.      * @return
  15.      */
  16.     public String upload(byte[] bytes, String objectName) {
  17.         // 创建OSSClient实例。
  18.         OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  19.         try {
  20.             // 创建PutObject请求。
  21.             ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));
  22.         } catch (OSSException oe) {
  23.             System.out.println("Caught an OSSException, which means your request made it to OSS, "
  24.                     + "but was rejected with an error response for some reason.");
  25.             System.out.println("Error Message:" + oe.getErrorMessage());
  26.             System.out.println("Error Code:" + oe.getErrorCode());
  27.             System.out.println("Request ID:" + oe.getRequestId());
  28.             System.out.println("Host ID:" + oe.getHostId());
  29.         } catch (ClientException ce) {
  30.             System.out.println("Caught an ClientException, which means the client encountered "
  31.                     + "a serious internal problem while trying to communicate with OSS, "
  32.                     + "such as not being able to access the network.");
  33.             System.out.println("Error Message:" + ce.getMessage());
  34.         } finally {
  35.             if (ossClient != null) {
  36.                 ossClient.shutdown();
  37.             }
  38.         }
  39.         //文件访问路径规则 https://BucketName.Endpoint/ObjectName
  40.         StringBuilder stringBuilder = new StringBuilder("https://");
  41.         stringBuilder
  42.                 .append(bucketName)
  43.                 .append(".")
  44.                 .append(endpoint)
  45.                 .append("/")
  46.                 .append(objectName);
  47.         log.info("文件上传到:{}", stringBuilder.toString());
  48.         return stringBuilder.toString();
  49.     }
  50. }
复制代码
代码实现


  • 在application.yml中编写相关信息
    1. sky:
    2.   alioss:
    3.     endpoint: oss-cn-hangzhou.aliyuncs.com
    4.     access-key-id: LTAI5tJKk5H21ZmQQ9CgeG8y
    5.     access-key-secret: 90xHhXxKqg6LNnbb4ubp1BeIdw7RAT
    6.     bucket-name: sky-zy2596
    复制代码
  • 编写AliOssProperties ,将yml文件信息映射到AliOssProperties对象中
    1. @Component
    2. @ConfigurationProperties(prefix = "sky.alioss")
    3. @Data
    4. public class AliOssProperties {
    5.     private String endpoint;
    6.     private String accessKeyId;
    7.     private String accessKeySecret;
    8.     private String bucketName;
    9. }
    复制代码
  • 编写配置类,创建AliOssUtil对象
    1. /**
    2. * 配置类,用于创建AliOssUtil对象
    3. */
    4. @Configuration
    5. @Slf4j
    6. public class OssConfiguration {
    7.     @Bean
    8.     @ConditionalOnMissingBean//保证spring容器只有一个AliOssUtil对象
    9.     public AliOssUtil aliOssUtil(AliOssProperties aliOssProperties ){//将aliOssProperties 中的属性赋给AliOssUtil对象
    10.         log.info("开始创建阿里云文件上传工具类对象:{}",aliOssProperties);
    11.         return new AliOssUtil(aliOssProperties.getEndpoint()
    12.                 ,aliOssProperties.getAccessKeyId()
    13.                 ,aliOssProperties.getAccessKeySecret()
    14.                 ,aliOssProperties.getBucketName());
    15.     }
    16. }
    复制代码
  • 编写文件上传接口
    1. @PostMapping("/upload")
    2. @ApiOperation("文件上传")
    3. public Result<String> upload(MultipartFile file){// file 这里的参数名必须和前端提交的参数名保持一致
    4.     log.info("文件上传:{}",file);
    5.     try {
    6.         //原始文件名
    7.         String originalFilename = file.getOriginalFilename();
    8.         //截取原始文件名的后缀
    9.         String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
    10.         //构造新文件名称
    11.         String objectName = UUID.randomUUID().toString() + extension;
    12.         //文件的请求路径
    13.         String filePath = aliOssUtil.upload(file.getBytes(), objectName);
    14.         return Result.success(filePath);
    15.     } catch (IOException e) {
    16.         log.error("文件上传失败:{}",e);
    17.     }
    18.        return Result.error("文件上传失败");
    19. }
    复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表