阿里云OSS使用

这篇具有很好参考价值的文章主要介绍了阿里云OSS使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

阿里云OSS购买之后

项目加入依赖

           <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>3.10.2</version>
            </dependency>

1、为了方便配置管理,建立配置实体类封装

将@ConfigurationProperties将配置信息,封装在application.yml中

  application.yml中的配置,具体参数,参考直接的OSS配置信息

jhj:
  blog:
    aliyun:
      endpoint: https://oss-cn-beijing.aliyuncs.com
      accessKeyId: *****
      accessKeySecret: ****
      bucketName: #存储空间名称
      bucketDomain: ********

  建立实体类进行封装application.yml中的信息

@Setter
@Getter
@Component
@ConfigurationProperties(prefix = "jhj.blog")
public class BlogProperties implements Serializable {
    //会将jhj.blog.aliyun下面的属性绑定到AliyunProperties 对象属性上。
    private AliyunProperties aliyun;

}

 AliyunProperties 实体类

@Setter
@Getter
public class AliyunProperties implements Serializable {
    /**
     * Oss的端点信息
     */
    private  String endpoint;

    private  String accessKeyId;
    private  String accessKeySecret;
    /**
     * 存储空间名称
     */
    private  String bucketName;
    /**
     * 访问文件时候作为基础的URL
     */
    private  String bucketDomain;

}

2、上传目录枚举类封装

方便拿取,这样就避免手动书写文件夹时候产生错误,

由下面上传可以看到 platformEnum.name().toLowerCase(),这样就拿到小写的名称,比如ARTICLE拿到转化后的就是article了

public enum PlatformEnum {

    ARTICLE, USER;

}

3、上传文件

    public static Result uploadFileToOss(PlatformEnum platformEnum, MultipartFile file, AliyunProperties aliyun) {
        // 上传
        // 上传文件所在目录名,当天上传的文件放到当天日期的目录下。格式如下:article/19990101
         //platformEnum.name().toLowerCase()获取到名称转小写
        String folderName = platformEnum.name().toLowerCase() + "/" + DateFormatUtils.format(new Date(), "yyyyMMdd");

        // 保存到 OSS 中的文件名,采用 UUID 命名。
        String fileName = UUID.randomUUID().toString().replace("-", "");

        // 从原始文件名中,获取文件扩展名
        String fileExtensionName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));

        // 文件在 OSS 中存储的完整路径
        String filePath = folderName + "/" + fileName + fileExtensionName;

        OSS ossClient = null;
        try {
            // 获取 OSS 客户端实例
            ossClient = new OSSClientBuilder().build(aliyun.getEndpoint(), aliyun.getAccessKeyId(), aliyun.getAccessKeySecret());

            // 上传文件到OSS 并响应结果
            PutObjectResult putObjectResult = ossClient.putObject(aliyun.getBucketName(), filePath, file.getInputStream());

            ResponseMessage response = putObjectResult.getResponse();
            if (response == null) {
                // 上传成功

                // 返回上传文件的访问完整路径
                return Result.ok(aliyun.getBucketDomain() + filePath);
            } else {
                // 上传失败,OOS服务端会响应状态码和错误信息
                String errorMsg = "响应的错误状态码是【" + response.getStatusCode() + "】," +
                        "错误信息【" + response.getErrorResponseAsString() + "】";
                return Result.error(errorMsg);
            }
        } catch (Exception e) {
            return Result.error(e.getMessage());
        } finally {
            if (ossClient != null) {
                // 关闭OSSClient。
                ossClient.shutdown();
            }
        }
    }

4、删除文件

    /**
     * 根据文件url删除
     *
     * @param fileUrl
     */
    public static Result delete(String fileUrl, AliyunProperties aliyun) {
        // 去除文件 url 中的 Bucket域名
        String filePath = fileUrl.replace(aliyun.getBucketDomain(), "");

        OSS ossClient = null;
        try {
            ossClient = new OSSClientBuilder().build(aliyun.getEndpoint(), aliyun.getAccessKeyId(), aliyun.getAccessKeySecret());
            // 删除
            ossClient.deleteObject(aliyun.getBucketName(), filePath);
            return Result.ok();
        } catch (Exception e) {
            return Result.error("删除失败:" + e.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

5、接口调用

1、采用autowired将自定义配置的阿里云参数的实体类注入 BlogProperties 

2、采用@RequestParam("file")标注文件信息

3、@RequestParam和@PathVariable这两者之间区别

用@RequestParam请求接口时,URL是:http://www.test.com/user/getUserById?userId=1

用@PathVariable请求接口时,URL是:http://www.test.com/user/getUserById/2

//将配置信息注入到全局
    @Autowired
    private BlogProperties blogProperties;

    @ApiOperation("上传文件到OSS服务器")
    @PostMapping("/upload")
    public Result upLoad(@RequestParam("file") MultipartFile file) {
        //获取阿里云相关配置信息
        AliyunProperties aliyun = blogProperties.getAliyun();
        Result result = AliyunUtil.uploadFileToOss(PlatformEnum.ARTICLE, file, aliyun);
        return result;
    }

    //   value = "file",required = true 表示强制传,不传报错 fileURl
    @ApiImplicitParam(name = "fileURl", value = "要删除的文件的URL", required = true)
    @ApiOperation("根据文件的URL删除再OSS上对应的文件")
    @DeleteMapping("/delete")
    public Result delete(@RequestParam(value = "fileURl", required = true) String fileURl) {
        AliyunProperties aliyun = blogProperties.getAliyun();
        Result deleteResult = AliyunUtil.delete(fileURl, aliyun);
        return deleteResult;
    }

6、前端部分实现单图片上传删除图片

  <el-upload
          class="avatar-uploader"
          accept="image/*"
          action=""
          :show-file-list="false"
          :http-request="uploadMainImg"
        >
          <img
            v-if="formData.imageUrl"
            :src="formData.imageUrl"
            class="avatar"
          />
          <i v-else class="el-icon-plus avatar-uploader-icon"></i>
        </el-upload>

 accept="image/*"接收图片方式

 :show-file-list="false" 不多文件展示

 :http-request="uploadMainImg" 单击时候直接调用方法

上传方法

    uploadMainImg(file) {
      const data = new FormData();
      data.append("file", file.file);
      commonApi
        .uploadImg(data)
        .then((response) => {
          //  以防图片多次上传,上传成功后,把原来的图片删除
          this.deleteImg();
          this.formData.imageUrl = response.data;
        })
        .catch((error) => {
          this.$message({
            type: "error",
            message: "上传失败",
          });
        });
    },
     uploadImg(data = {}) {
        return request({
            url: `/article/file/upload`,
            method: 'post',
            data // data: data 简写
        })
    },

注意传递的是 

const data = new FormData();

 data.append("file", file.file);

而不是直接file传递

删除方法

props下面,接收原始图片的URL,进行对比,判断是否删除

    oldImageUrl: {
      // 标题
      type: String,
      default: "",
    },

      // 如果之前图片路径不为空,则先删除之前的图片
      // 原始的图片为a,如果第二次上传为B,b不等于时候才删除以前图片,这样原始的那张图片就可以保存下来文章来源地址https://www.toymoban.com/news/detail-431025.html

 deleteImg() {
      // 如果之前图片不为空,则先删除之前的图片
      // 原始的图片为a,如果第二次上传为B,b不等于时候才删除以前图片,这样原始的那张图片就可以保存下来
      if (
        this.formData.imageUrl &&
        this.formData.imageUrl !== this.oldImageUrl
      ) {
        commonApi.deleteImg(this.formData.imageUrl);
      }
    },
deleteImg(imageUrl) {
        return request({
            url: `/article/file/delete`,
            method: 'delete',
            params: { 'fileUrl': imageUrl }
        })
}

到了这里,关于阿里云OSS使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信电商小程序购买/加入购物车组件设计

    作为一名常常摆烂,一蹶不振的大学生,最近接到了开发电商小程序的小任务,既然是电商,总得有购买加车功能吧?经过n个坤年的拜读微信小程序开发者文档还有别的大佬的指点,奉上我自己的理解,欢迎各位大佬指点改正,学习交流,共同进步。该文章适合微信小程序初

    2024年02月09日
    浏览(36)
  • 阿里云OSS使用

    阿里云OSS购买之后 项目加入依赖 将@ConfigurationProperties将配置信息,封装在application.yml中   application.yml中的配置,具体参数,参考直接的OSS配置信息   建立实体类进行封装application.yml中的信息  AliyunProperties 实体类 方便拿取,这样就避免手动书写文件夹时候产生错误, 由下

    2024年02月02日
    浏览(28)
  • 阿里云对象存储OSS使用

    对象存储服务(Object Storage Service,简称 OSS)为您提供基于网络的数据存取服务。使用 OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。 对象存储可以简单理解为用来存储图片、音频、视频等非结构化数据的数据池。相对于主

    2024年02月11日
    浏览(40)
  • PHP-阿里云oss使用

    为什么要使用第三方存储? 1)静态文件会占用大量带宽; 2)加载速度 3)存储空间 第三方存储有哪些? 1)阿里云oss 2)七牛云 3)又拍云 等等 阿里云OSS的介绍https://www.aliyun.com/product/oss/ 阿里云oss的使用 阿里云oss使用步骤: 1.申请key和secret(把key和secret保存好,项目中配置使

    2024年02月11日
    浏览(33)
  • 阿里云oss对象存储的使用

    1.介绍 对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储 服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优 化存储成本。 2.使用步骤   1)登录阿里云:https://www.aliyun.com   2)开通阿里云对象存储服

    2024年01月17日
    浏览(36)
  • 阿里云OSS服务使用操作流程

    阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。 OSS具有与平台无关的RESTful API接口,您可以在任何应用、任何时间、任何地点

    2023年04月09日
    浏览(33)
  • 阿里云的OSS云存储的使用

    阿里云官网:https://www.aliyun.com/ 通过阿里云官网,登录进入用户的界面,在搜索框中输入OSS,然后进入阿里云的对象存储OSS的控制台。(未开通的开通即可) 点击【Bucket 列表】,查看个人的Bucket。点击【创建 Bucket】,创建新的 Bucket。其中必填项有: Bucket 名称:唯一的就行

    2024年02月09日
    浏览(27)
  • 云服务——阿里云OSS的入门使用

    紧接着上一集里面说到的,网络资源大多都不会直接放在服务器端,而是放在别的专门的云存储平台里面。 比如短信服务如果自己实现会非常繁琐,需要和各个运营商对接,使用阿里云提供的短信服务后只需要调用短信服务即可  存储网络资源需要用到对象存储:概念如下  

    2024年02月09日
    浏览(28)
  • java 使用 阿里云OSS云存储

    分布式文件存储,浏览器上传的文件,统一存储到一个服务器 本文选择统一存储到云存储 先贴计费,很便宜 原文:https://www.aliyun.com/price/product?spm=5176.8465980.help.3.4e701450R42spo#/oss/detail/ossbag aliyun官网 - 产品 - oss对象存储 开通 如果未实名认证,需要认证一下,支付宝认证,约一

    2024年02月05日
    浏览(22)
  • 如何使用阿里云OSS进行前端直传

    在使用阿里云OSS进行前端直传时,首先我们需要去阿里云官网注册自己的存储桶,然后申请相关的accessKeyId和accessKeySecret,然后新建一个桶,为这个桶命名以及选择对应的地区。 然后可以根据自己的业务,封装对应的组件,以下是根据我自己的项目,所封装的上传组件,所用

    2024年02月21日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包