zoukankan      html  css  js  c++  java
  • 阿里云oss文件服务器

    阿里云oss文件服务器

    1、开始
    a、创建bucket,并设置为公共读权限
    b、创建用户,访问方式为编程访问
    c、为用户创建accesskey,并开启用户的oss权限
    d、application.yml
    aliyun:
      # 要带上 https:// ,上传时要使用的
      endpoint: https://oss-cn-shanghai.aliyuncs.com
      accessKeyId: xxxxxxxx # 根据自己的帐号配置
      accessKeySecret: xxxxxxxx # 根据自己的帐号配置
      bucketName: xxxx # 存储空间名称
      # Bucket域名,访问文件时作为URL前缀,注意要加上 https:// 和 结尾带上 /
      bucketDomain: https://xxxx.oss-cn-shanghai.aliyuncs.com/
    
    2、pom.xml
    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
    </dependency>
    
    3、AliyunUtil
    /**
     * 阿里云工具类
     */
    public final class AliyunUtil {
    
        /**
         * 上传图片文件
         * @param platformEnum 类型:文章,用户
         * @param file  MultipartFile文件对象
         * @param aliyun AliyunProperties 阿里云配置
         * @return
         */
        public static Result uploadFileToOss(PlatformEnum platformEnum, MultipartFile file, AliyunProperties aliyun ) {
            // 上传
            // 上传文件所在目录名,当天上传的文件放到当天日期的目录下。article/19990101/123123.png
            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();
                }
            }
        }
    
        /**
         * 根据文件url删除
         * @param fileUrl
         */
        public static Result delete(String fileUrl, AliyunProperties aliyun) {
            // 去除文件 url 中的 Bucket域名 article/20200729/9d83082760e84c15a685d6e61338174a.png
            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();
                }
            }
        }
    
    }
    
    4、FileController
    /**
     * 文件控制器
     */
    @RequestMapping("/file")
    @RestController
    public class FileController {
    
        @Autowired
        private BlogProperties blogProperties;
    
        @PostMapping("/upload")
        public Result upload(@RequestParam("file") MultipartFile file ) {
            // 获取阿里云 OSS 相关配置信息
            AliyunProperties aliyun = blogProperties.getAliyun();
    
            return AliyunUtil.uploadFileToOss(PlatformEnum.ARTICEL, file, aliyun);
        }
    
        @DeleteMapping("/delete")
        public Result delete(@RequestParam(value = "fileUrl", required = true)
                                         String fileUrl) {
            return AliyunUtil.delete(fileUrl, blogProperties.getAliyun());
        }
        
    }
    
  • 相关阅读:
    无法连接到已配置的开发web服务器
    Java开发命名规范总结
    java包名命名规范[【转】
    github远程建了分支,本地看不到的问题
    git远程删除分支后,本地git branch -a 依然能看到的解决办法
    git主要操作命令
    Ant之build.xml配置详解【转】
    git合并指定文件到另一分支
    java最简单实现Log打印和生成日志文件
    SCF: 简单配置门面[转]
  • 原文地址:https://www.cnblogs.com/linding/p/14863672.html
Copyright © 2011-2022 走看看