SpringBoot 七牛云 OSS 私有模式 获取访问链接

目录

一、问题引出

二、在SpringBoot中获取私有访问路径的操作


一、问题引出

由于七牛云OSS的公有模式存在被盗刷的风险,可能导致服务器额外的费用,于是我选择私有模式进行操作。私有模式的访问路径是一个问题,因为需要对应着token和e这两个参数,经过尝试后,我发现解决私有访问的方法如下。

七牛云的常规操作见:Springboot OSS 七牛云 上传、删除、访问图_七牛云oss-CSDN博客

二、在SpringBoot中获取私有访问路径的操作

@Service
public class QiniuOSSServiceImpl implements QiniuOSSService {

    @Autowired
    private Auth auth;


    @Override
    public String getOSSToken(String key) {
        return auth.privateDownloadUrl(QiniuOSSService.HOST + key, QiniuOSSService.TOKEN_EXP);
    }
}
String HOST = "http://domain/";  //OSS host
int TOKEN_EXP = 3600; //OSS token过期时间 秒 s

这样即可获取到私有访问路径,测试发现私有访问路径有效。

参考文档:如何获取存储文件的外链接 - 七牛开发者中心

### Spring Boot 集成七牛云存储文件上传下载示例 #### 添加 Maven 坐标 为了能够使用七牛云的服务,在项目的 `pom.xml` 中需引入相应的依赖项: ```xml <dependencies> <!-- 七牛云 --> <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.7.0, 7.10.99]</version> </dependency> <!-- Gson 序列化工具 --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> <scope>compile</scope> </dependency> </dependencies> ``` #### 编写配置文件 在 `application.yml` 或者 `application.properties` 文件中定义连接到七牛云所需的信息,包括访问密钥、私有密钥以及存储桶的名字等。 ```yaml server: port: 8077 oss: qiniu: accessKey: your_access_key_here secretKey: your_secret_key_here bucketName: test-bucket-name zone: huabei # 可选值:huadong/huanan/huabei/beimei domain: http://your-domain.com/ spring: thymeleaf: cache: false ``` #### 创建配置类并注册 Bean 创建一个新的 Java 类用于封装上述属性,并通过 `@ConfigurationProperties` 注解将其映射至 YAML/properties 文件中的相应字段;同时提供获取 UploadManager 和 Auth 对象的方法以便于后续操作。 ```java @Configuration @ConfigurationProperties(prefix = "oss.qiniu") public class QiniuConfig { private String accessKey; private String secretKey; private String bucketName; private Zone zone; @Bean(name="auth") public com.qiniu.util.Auth auth() { return com.qiniu.util.Auth.create(accessKey, secretKey); } @Bean(name="uploadManager") public com.qiniu.storage.UploadManager uploadManager(){ Configuration cfg = new Configuration(zone); return new com.qiniu.storage.UploadManager(cfg); } } ``` #### 实现文件上传功能 编写控制器来处理来自客户端的请求并将接收到的数据流发送给七牛服务器完成实际的文件保存工作。注意这里的 token 是基于之前提到过的认证信息动态生成出来的临时凭证。 ```java @RestController @RequestMapping("/api/file") public class FileController { @Autowired private QiniuConfig config; @PostMapping(value="/upload", consumes={"multipart/form-data"}) public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file){ try{ InputStream inputStream=file.getInputStream(); // 获取Token String upToken=config.auth().uploadToken(config.getBucketName()); Response response= config.uploadManager() .put(inputStream,file.getOriginalFilename(),upToken,null,null); DefaultPutRet putRet=new Gson().fromJson(response.bodyString(),DefaultPutRet.class); Map<String,Object> resultMap=new HashMap<>(); resultMap.put("key",putRet.key); resultMap.put("url",config.getDomain()+"/"+putRet.key); return ResponseEntity.ok(new ObjectMapper().writeValueAsString(resultMap)); }catch(Exception e){ log.error(e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } } } ``` #### 实现文件下载链接生成 当需要分享已存入的对象时可以调用此方法返回可直接点击打开的目标资源地址。 ```java @GetMapping("/{fileName}") public ResponseEntity<?> getFileUrl(@PathVariable String fileName) throws JsonProcessingException { String url = config.auth().privateDownloadUrl( MessageFormat.format("{0}{1}", config.getDomain(), fileName), 3600 * 24 * 7 // 设置有效期为一周 ); return ResponseEntity.ok(url); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值