静态资源存储之阿里云oss

1、登陆阿里云官网登陆控制台搜索oss

点击bucket列表

 创建一个bucket

填写bucket桶名称,选定地域等

创建bucket成功后创建公钥和私钥

 创建公钥和私钥需要短信验证按照提示操作即可

 创建完成保存公钥和私钥也可在AccessKey中短信验证查看

在oss主页右下方点击开发者指南继续点击左下角在文档中心中打开

继续点击sdk示例

 

 点击Java

 安装skd复制下面依赖添加的项目pom文件中刷新maven。

 复制sdk代码

 

文件上传到本地的代码如图所示:

 修改为阿里云oss文件上传:

代码如下:

   @Override
    public Result insetRecord(VisitsRcodeDto visitsRecordDto, MultipartFile multipartFile) {
        VisitsRecord visitsRecord = new VisitsRecord();

        String url = "";
        log.info("员工信息: [{}]", visitsRecordDto.toString());
        if (multipartFile != null) {
            MultipartFile file = multipartFile;
            log.info("文件名: [{}]", file.getOriginalFilename());
            // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
            String endpoint = AliConfig.END_POINT;
            // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
            String accessKeyId = AliConfig.ACCESS_KEY_ID;
            String accessKeySecret = AliConfig.ACCESS_KEY_SECRET;
            String bucketName = AliConfig.BUCKET_NAME;
            String folder = AliConfig.FOLDER;
            try {
                // 创建OSSClient实例。
                OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
                // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
                InputStream inputStream = file.getInputStream();
                //获取文件真实名称
                String originalFilename = file.getOriginalFilename();
                //重命名,防止相同文件出现覆盖
                //生成的f4f2e1a3-391a-4d5a-9438-0c9f5d27708c 需要替换成 f4f2e1a3391a4d5a94380c9f5d27708c
                String uuid = UUID.randomUUID().toString().replaceAll("-", "");
                //新的文件名
                originalFilename = uuid + originalFilename;
                //2、把文件按照日期进行分类
                String datePath = new DateTime().toString("yyyy/MM/dd");
                //拼接
                originalFilename = folder + "/" + datePath + "/" + originalFilename;
                // oss实现上传文件
                ObjectMetadata objectMetadata = new ObjectMetadata();
                objectMetadata.setContentType(getcontentType(originalFilename.substring(originalFilename.lastIndexOf("."))));
                ossClient.putObject(bucketName, originalFilename, inputStream,objectMetadata);
                // 关闭OSSClient
                ossClient.shutdown();
                //拼接url
                url = "https://" + bucketName + "." + endpoint + "/" + originalFilename;

            } catch (Exception e) {
                e.printStackTrace();

            }
        }
创建一个配置类ApiConfig:

@Component
@PropertySource(value = "classpath:application.yml") //指定配置文件的位置
public class AliConfig implements InitializingBean {
    /**
     * 对应公网endpoint地址
     */
    @Value("${aliyun.oss.file.endpoint}")
    private String endpoint;

    /**
     * AccessKeyId
     */
    @Value("${aliyun.oss.file.accessKeyId}")
    private String accessKeyId;

    /**
     * AccessKeySecret
     */
    @Value("${aliyun.oss.file.accessKeySecret}")
    private String accessKeySecret;

    /**
     * Bucket名称
     */
    @Value("${aliyun.oss.file.bucketName}")
    private String bucketName;

    /**
     * 上传文件夹路径
     */
    @Value("${aliyun.oss.file.folder}")
    private String folder;

    public static String END_POINT;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;
    public static String BUCKET_NAME;
    public static String FOLDER;

    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = endpoint;
        ACCESS_KEY_ID = accessKeyId;
        ACCESS_KEY_SECRET = accessKeySecret;
        BUCKET_NAME = bucketName;
        FOLDER = folder;
    }

编写yml文件:

aliyun:
  oss:
    file:
      endpoint: oss-cn-shenzhen.aliyuncs.com # 对应公网endpoint地址 例如实例为深圳
      accessKeyId: 你的公钥
      accessKeySecret: 你的私钥
      bucketName: 你创建的bucket名称
      folder: active #保存文件夹路径可以自己命名

编写一个ContentType类,不然点击链接默认是下载不可以在线查看:


    public static String getcontentType(String FilenameExtension) {
        if (FilenameExtension.equalsIgnoreCase(".bmp")) {
            return "image/bmp";
        }
        if (FilenameExtension.equalsIgnoreCase(".gif")) {
            return "image/gif";
        }
        if (FilenameExtension.equalsIgnoreCase(".jpeg") ||
                FilenameExtension.equalsIgnoreCase(".jpg") ||
                FilenameExtension.equalsIgnoreCase(".png")) {
            return "image/jpg";
        }
        if (FilenameExtension.equalsIgnoreCase(".html")) {
            return "text/html";
        }

        if (FilenameExtension.equalsIgnoreCase(".txt")) {
            return "text/plain";
        }
        if (FilenameExtension.equalsIgnoreCase(".vsd")) {
            return "application/vnd.visio";
        }
        if (FilenameExtension.equalsIgnoreCase(".pdf")) {
            return "application/pdf";
        }
        if (FilenameExtension.equalsIgnoreCase(".pptx") ||
                FilenameExtension.equalsIgnoreCase(".ppt")) {
            return "application/vnd.ms-powerpoint";
        }
        if (FilenameExtension.equalsIgnoreCase(".docx") ||
                FilenameExtension.equalsIgnoreCase(".doc")) {
            return "application/msword";
        }
        if (FilenameExtension.equalsIgnoreCase(".xml")) {
            return "text/xml";
        }
        return "image/jpg";
    }

 测试结果:按日备份文件如图所示

 按照上述操作就可以引入oss存储对象sdk实现文件上传和在线查看了,赶快动起来吧!!

猜你喜欢

转载自blog.csdn.net/m0_46523467/article/details/124696424