智能云协同图库第9期小问题点(摆烂版
解决过程
断点打到这里就返回403状态码,一般来说就是鉴权出问题了
从浏览器控制台返回的扩图链接是可以正常访问的,那么就可以思考后端是否做了处理导致链接变了导致无法访问呢?
往上翻在验证URL之前原始的扩图链接就被编码过了,导致无法访问。
继续往前翻,上传图片第一步骤就是触发validPicture 方法验证图片

继续翻,到了服务层。这里是为了兼容文件上传与链接上传做了处理
一般在浏览器复制的图片链接,不用鉴权就能获取的

继续找到了发现在接口层的时候URL就已经被编码过了。
%2B会编码成 + 号导致签名错误
尝试把这里转换回去原始链接
▼java复制代码package com.sion.sionpicturebackend.utils; public class UrlUtils { /** * 修复阿里云AI扩图URL中被误解码的“+”符号(空格 → +) */ public static String fixAliImageAIUrl(String url) { if (url == null) { return null; } boolean isAliAIUrl = url.contains("oss-cn-shanghai.aliyuncs.com") && url.contains("/service_dashscope/ImageOutPainting/") && url.contains("Signature"); // 仅修复这类链接中的空格 if (isAliAIUrl) { return url.replace(" ", "+"); } return url; } }
▼java复制代码@PostMapping("/upload/url") public BaseResponse<PictureVO> uploadPictureByUrl(@RequestBody PictureUploadRequest pictureUploadRequest, HttpServletRequest request) { User loginUser = userService.getLoginUser(request); String fileUrl = pictureUploadRequest.getFileUrl(); // 处理阿里云签名链接 fileUrl = UrlUtils.fixAliImageAIUrl(fileUrl); PictureVO pictureVO = pictureService.uploadPicture(fileUrl, pictureUploadRequest, loginUser); return ResultUtils.success(pictureVO); }
哎!别生气看来不是这个原因,依旧无法保存
看看这个请求方式是不是有问题

✅ 为什么会出现这个问题?
阿里云 OSS 的签名 URL 是敏感的,如果:
- URL 被重新编码(如 %2B 被还原成 +,或反之)(只在浏览器中确认过)
- 请求方法或请求头(例如 CanonicalizedResource)与签名计算时不同
- 你用 HEAD 或自定义头模拟 GET 请求,但和原浏览器请求不一致
- 参数顺序、空格、解码、编码等稍有变化
都可能会导致签名校验失败。
解决方案
浏览器请求没有问题,程序请求有问题 那么我们模拟浏览器发送get请求试试,反正用的是阿里提供的对象存储资源不用节省它的流量
▼java复制代码// 更精确判断是否为阿里云AI扩图返回链接 isAliOSS = fileUrl != null && fileUrl.contains("vigen-invi.oss-cn-shanghai.aliyuncs.com"); Method method = isAliOSS ? Method.GET : Method.HEAD; response = HttpRequest.of(fileUrl, StandardCharsets.UTF_8) .method(method) .header("User-Agent", "Mozilla/5.0") .timeout(3000) .execute();
好,非常好,特别好,遇见你更好 , 至此已成艺术
返回的图像链接会失效,可能是10来分钟。所以不要断点调试太久,可能你已经写对代码了,但图片已经403了哈哈
那么问题又来啦!图片过大!(开摆

我这里扩图业务返回的链接给两倍空间,让其通过图片大小验证再让腾讯云帮我压缩
但这只是很暴力的解决方案
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
学习完智能协同云图库项目后,想改造成springcloudalibaba架构的微服务项目,微服务划分如下:依赖服务:- 注册中心与配置中心: Nacos(负责服务注册发现以及各服务的动态配置管理)- 微服务网关(yunpic-backend-gateway): Gateway 聚合所有接口,统一接收处理前端请求,负责路由转发、鉴权与限流公共模块:- common 公共模块(yunpic-backe
4
云图库-以图搜图失效解决
7
个人博客
4
我在做云图库项目到部署上线阶段时,前后端已经成功部署到宝塔云上,我也能成功通过我的域名正常访问云图库,注册新账户也是注册成功且远程数据库也有信息,但是用已有的账号登录总是显示系统错误。我看了下我的redis密码正确且服务是正常运行请问有人遇到过同样的问题吗?
3
智能协同云图库-进入编辑报错解决
4
