【MoodVine】Cloudflare R2对象存储使用

Cloudflare R2 定价情况

官方定价说明

cloudflare R2对象存储每个月提供10GB的免费额度,对于个人开发者足够使用,接下来开始配置

配置

  1. 配置支付方式

    此处正常填写信息即可,如果没有信用卡,可以使用paypal(绑定普通银行卡)

  2. 创建存储桶

  3. 使用自定义域访问

    填写自定义域,点击连接域后,Cloudflare会自动为我们已经托管在其上的域名添加DNS记录

Java工具类

  1. 引入Maven依赖

    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3</artifactId>
        <version>2.27.13</version>
    </dependency>
    
  2. 工具类实现如下

    package org.example.moodvine_backend.utils;
    
    import org.springframework.beans.factory.annotation.Value;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Component;
    import org.springframework.web.multipart.MultipartFile;
    import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
    import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
    import software.amazon.awssdk.regions.Region;
    import software.amazon.awssdk.services.s3.S3Client;
    import software.amazon.awssdk.services.s3.model.PutObjectRequest;
    import software.amazon.awssdk.services.s3.model.PutObjectResponse;
    
    import java.io.IOException;
    import java.net.URI;
    
    @Slf4j
    @Component
    public class R2Utils {
    
        // 加载配置
        @Value("${R2.access-key-id}")
        String accessKeyId;
    
        @Value("${R2.secret-access-key}")
        String secretAccessKey;
    
        @Value("${R2.end-point}")
        String endpoint;
    
        @Value("${R2.bucket-name}")
        String bucketName;
    
        public String uploadFile(MultipartFile file) throws IOException {
            // 创建S3客户端
            S3Client s3 = S3Client.builder()
                    .endpointOverride(URI.create(endpoint))
                    .region(Region.US_EAST_1)  // Cloudflare R2区域(选择合适的区域)
                    .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKeyId, secretAccessKey)))
                    .build();
    
            // 上传文件
            PutObjectRequest putObjectRequest = PutObjectRequest.builder()
                    .bucket(bucketName)
                    .key(file.getOriginalFilename())
                    .build();
    
            PutObjectResponse response = s3.putObject(
                    putObjectRequest,
                    software.amazon.awssdk.core.sync.RequestBody.fromBytes(file.getBytes())
            );
            log.info("File uploaded successfully: {}" , response.eTag());
    
            // 关闭S3客户端
            s3.close();
            // 拼接URL
            String url = "<https://img.rainnn.top/>"+file.getOriginalFilename();
            return url;
        }
    }
    
    
  3. 创建API令牌

  4. 获取access-key-idsecret-access-keyend-pointbucket-name

    前三个在创建好API令牌后可以轻松获取,bucket-name是前面创建的令牌桶的名字

  5. application.yml 中添加配置

    R2:
      access-key-id: 
      secret-access-key: 
      end-point: https:
      bucket-name: 
    
  6. 编写接口测试工具类

    接口如下:

    @RequestMapping("/file")
    @RestController
    public class FileController {
    
        @Autowired
        FileService fileService;
    
        @PostMapping("/upload")
        public ResponseData upload(MultipartFile file) {
            return fileService.upload(file);
        }
    }
    
    @Service
    public class FileService {
    
        @Autowired
        R2Utils r2Utils;
    
        public ResponseData upload(MultipartFile file) {
            try {
                String url = r2Utils.uploadFile(file);
                return new ResponseData(200, url, "File uploaded successfully");
            } catch (IOException e) {
                return new ResponseData(500, null, "Failed to upload file: " + e.getMessage());
            }
        }
    }
    
  7. 使用Apifox测试接口

返回链接经检验是所上传图片,成功!后续需要添加图片、视频、音频格式判断及压缩等代码。

### 使用 Cloudflare 服务配置和管理网站流量 #### 配置域名Cloudflare 为了使网站能够利用 Cloudflare 的功能,需先将域名托管到 Cloudflare 上。登录账户后,在仪表板内添加所需保护的新站点并按照指示操作完成DNS信息迁移[^1]。 #### 设置 DNS 记录 进入Cloudflare控制面板中的DNS设置页面来创建必要的A记录或其他类型的DNS条目指向主机服务器IP地址;确保所有必需的服务(例如邮件)都能正常工作。对于希望启用CDN加速的内容可以开启橙云模式(orange cloud icon),这会使得请求通过Cloudflare网络传输而不是直接访问源站[^2]。 #### 启用安全级别与防火墙规则 在速度选项卡下调整性能优化参数如自动最小化HTML/CSS/JavaScript文件大小等以提高加载效率。而在安全性部分,则可根据实际需求设定不同等级的安全防护措施以及自定义WAF(Web Application Firewall)规则过滤恶意流量,减少DDoS攻击风险的同时不影响合法用户的浏览体验[^3]。 #### 利用 Workers 实现边缘计算 如果开发者想要进一步增强应用的功能性和响应时间,还可以探索Cloudflare提供的Workers平台——允许编写运行在网络边缘位置的小型JavaScript程序处理HTTP请求前后的逻辑运算或数据转换任务,从而实现更灵活高效的业务流程定制化解决方案[^4]。 ```javascript addEventListener('fetch', event => { let url = new URL(event.request.url); // 修改URL路径为例示 url.pathname = '/new-path'; let request = new Request(url, event.request); event.respondWith(fetch(request)); }) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值