当前位置: 首页 > news >正文

java_oss_微信小程序_通过临时签名url访问oss中存储的图像

1. 使用版本

spring boot 3.2.5

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version></parent>    <alibaba.version>2023.0.3.3</alibaba.version><springframework.version>2023.0.1</springframework.version>           <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${springframework.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${alibaba.version}</version><type>pom</type><scope>import</scope></dependency>

ali oss 3.17.4

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

2. java端获取签名的url

建一个OssConfig配置类, 定义OSS对象 ossClient:

package com.johnsport.ppzy.advertise.config;import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyuncs.exceptions.ClientException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class OssConfig {//知识点:使用@Value读取application-dev.yml文件中的属性值@Value("${aliyun.endpoint}")private String endpoint;//    @Value("${aliyun.keyid}")//    private String keyid;//    @Value("${aliyun.keysecret}")//    private String keysecret;@Value("${aliyun.bucketname}")private String bucketName;@Value("${aliyun.region}")private String region;@Beanpublic OSS ossClient() throws ClientException {// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。EnvironmentVariableCredentialsProvider credentialsProvider =CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();// 当OSSClient实例不再使用时,调用shutdown方法以释放资源。ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);//参考文档:https://help.aliyun.com/zh/oss/developer-reference/simple-upload-11?spm=a2c4g.11186623.help-menu-31815.d_3_2_0_3_0_0.6ef81855hqyaRP// https://help.aliyun.com/zh/oss/developer-reference/simple-upload-11?spm=a2c4g.11186623.help-menu-31815.d_5_2_1_3_0_0.59f61a9cviNbZl// 创建OSSClient实例。OSS ossClient = OSSClientBuilder.create().endpoint(endpoint).credentialsProvider(credentialsProvider).clientConfiguration(clientBuilderConfiguration).region(region).build();return ossClient;}
}

3. 定义获取图像接口:

    /*** 获取 OSS 图片签名 URL*/@Operation(summary = "获取OSS图片")@GetMapping(value = "/getImage")  // 强制声明返回类型)public Result getImageUrl(@Parameter(description = "OSS中文件名称", example = "/2025/06/10/abc.png")@RequestParam("objectName") String objectName) throws ClientException {System.out.println("objectName:" + objectName);String file_url = ossService.generatePresignedUrl(objectName);return Result.ok(file_url);}

定义ossService:

package com.your.package.name.service.impl;import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.aliyuncs.exceptions.ClientException;
import com.johnsport.ppzy.advertise.service.OssService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import java.awt.desktop.SystemEventListener;
import java.net.URL;
import java.util.Date;@Service
public class OssServiceImpl implements OssService {@Autowiredprivate OSS ossClient;@Value("${aliyun.bucketname}")private String bucketName;@Overridepublic String generatePresignedUrl(String objectName) throws ClientException {try {// 2. 设置URL过期时间Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);// 3. 生成签名URLGeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName,objectName,HttpMethod.GET);request.setExpiration(expiration);request.setProcess("image/resize,w_500"); // 强制返回图片而非下载// request.setContentType("image/jpg"); // 明确响应类型URL signedUrl = ossClient.generatePresignedUrl(request);String resultUrl = signedUrl.toString();System.out.println("resultUrl:" + resultUrl);// 返回给前端的URL示例:// https://your-bucket-name.oss-cn-beijing.aliyuncs.com/2025/06/09/image.jpg?OSSAccessKeyId=xxx&Expires=xxx&Signature=xxxreturn resultUrl;} catch (Exception ce) {System.out.println("Caught an ClientException, when generatePresignedUrl");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}return null;}}

使用curl 命令即可获取到临时签名的图像url:

4. OSS规则设置:

 防盗链规则设置:添加“*servicewechat.com”  (这条最关键)

其它安全设置:

 读写权限设置:

跨域设置:

阻止公共访问:

http://www.xdnf.cn/news/1018261.html

相关文章:

  • 微信小程序中跨页面调用函数来刷新页面
  • 深入理解JavaScript设计模式之策略模式
  • @Profile, @Conditional, @ConditionalOnMissingBean, @ConditionalOnClass
  • nodejs 语言特性(面试系列2)
  • 【Pandas】pandas DataFrame droplevel
  • java中跨域问题及解决方案
  • Spring XML 常用命名空间配置
  • React Native 项目实战 —— 记账本应用开发指南
  • 【React Native 性能优化:虚拟列表嵌套 ScrollView 问题全解析】
  • Java-数组-异常(基础)
  • 包含40个购物网站UI界面的psd适用于电商项目
  • 在 Linux 系统中通过 yum 安装 Sublime Text
  • 平压印刷机设计原理与关键技术研究
  • 网络安全防护:点击劫持
  • Linux 系统设置时区
  • Token 的流动性:为什么它是项目的关键?
  • 传染病传播模拟:基于社会接触网络的疫情预测模型
  • 【设计模式】UML图与工厂模式
  • 德信软件,512天,我的创作纪念日
  • RocketMQ总结
  • Rimini Street宣布将SAP ECC和S/4HANA支持延长至2040年,为企业提供替代路径
  • 基于大模型预测过敏性紫癜的技术方案大纲
  • Rust 学习笔记2025.6.13
  • Excel词典(xllex.dll)文件丢失或损坏导致功能异常?别慌!专业修复策略来了!
  • 排序--计数排序
  • Active Directory Certificate Services(AD CS)攻击基础
  • Java单例模式有几种实现方式
  • 为什么py文件打包后大小会增加很多?
  • 亚马逊云 Lambda 容器化部署教程
  • Rust 学习笔记:关于处理任意数量的 future 的练习题