阿里云OSS服务 — 上传失败
问题重现
使用PicGo + 阿里云对象存储搭建图床,一直都能够正常使用,在没有修改任何配置的情况下,上传图片一直失败。

出现如下错误:
StatusCodeError: 403 - "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error>\n <Code>SignatureDoesNotMatch</Code>\n <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>\n <RequestId>62C6AB175C0069393406DCEC</RequestId>\n <HostId>lzy-gallery.oss-cn-hangzhou.aliyuncs.com</HostId>\n <OSSAccessKeyId>LTAI5tBzvHTuwZhbyTuy2a5d</OSSAccessKeyId>\n <SignatureProvided>88NzhUKMUF/n4K7i9+dOhwMoB9A=</SignatureProvided>\n <StringToSign>PUT\n\nimage/png\nThu, 07 Jul 2022 09:44:55 GMT\n/lzy-gallery/images/B 树.png</StringToSign>\n <StringToSignBytes>50 55 54 0A 0A 69 6D 61 67 65 2F 70 6E 67 0A 54 68 75 2C 20 30 37 20 4A 75 6C 20 32 30 32 32 20 30 39 3A 34 34 3A 35 35 20 47 4D 54 0A 2F 6C 7A 79 2D 67 61 6C 6C 65 72 79 2F 69 6D 61 67 65 73 2F 42 20 E6 A0 91 2E 70 6E 67 </StringToSignBytes>\n</Error>\n"
at new StatusCodeError (G:\tools\PicGo\resources\app.asar\node_modules\request-promise-core\lib\errors.js:32:15)
at Request.plumbing.callback (G:\tools\PicGo\resources\app.asar\node_modules\request-promise-core\lib\plumbing.js:104:33)
at Request.RP$callback [as _callback] (G:\tools\PicGo\resources\app.asar\node_modules\request-promise-core\lib\plumbing.js:46:31)
at Request.self.callback (G:\tools\PicGo\resources\app.asar\node_modules\request\request.js:185:22)
at Request.emit (events.js:200:13)
at Request.<anonymous> (G:\tools\PicGo\resources\app.asar\node_modules\request\request.js:1154:10)
at Request.emit (events.js:200:13)
at IncomingMessage.<anonymous> (G:\tools\PicGo\resources\app.asar\node_modules\request\request.js:1076:12)
at Object.onceWrapper (events.js:288:20)
at IncomingMessage.emit (events.js:205:15)
问题解决
查看错误日志发现:
<StringToSign>PUT\n\nimage/png\nThu, 07 Jul 2022 09:44:55 GMT\n/lzy-gallery/images/B 树.png</StringToSign>
图片名字的 "+" 号不见了,于是笔者将图片命名改为 "B_plus_tree.png" 重新上传成功。
为什么加号会导致上传失败呢?
笔者查看了阿里云对象命名规则:

使用UTF-8编码,长度在1~1023字节,不能以斜线开头即可。按照这个逻辑使用 "+" 号完全没问题呀。于是猜测是PicGo的问题,但是没有找到PicGo的图片命名规则。
有知道的小伙伴欢迎解惑。
阿里云OSS服务 — 上传失败的更多相关文章
- 构建基于阿里云OSS文件上传服务
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...
- 记一次阿里云oss文件上传服务假死
引言 记得以前刚开始学习web项目的时候,经常涉及到需要上传图片啥的,那时候都是把图片上传到当前项目文件夹下面,每次项目一重启图片就丢了.虽然可以通过修改/tomcat/conf/server.xml ...
- PHP实现阿里云OSS文件上传(支持批量)
上传文件至阿里云OSS,整体逻辑是,文件先临时上传到本地,然后在上传到OSS,最后删除本地的临时文件(也可以不删,具体看自己的业务需求),具体实现流程如下: 1.下载阿里云OSS对象上传SDK(P ...
- Thinkphp整合阿里云OSS图片上传实例
Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 < ...
- ThinkPHP5使用阿里云OSS图片上传
1.下载OSS文件放在网站根目录下(OSS文件下载地址:https://gitee.com/jth1234/oss_files.git) 2.在入口文件中加载OSS 3.config文件配置oss信息 ...
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...
- php阿里云oss文件上传
php的文件上传 文件上传 php的文件上传放在了$_FILES数组里,单文件和多文件上传的区别在于$_FILES['userfile']['name']是否为数组, 不熟悉的可以读一下官方文档 单文 ...
- 阿里云OSS图片上传类
1.阿里云基本函数 /** * 把本地变量的内容到文件 * 简单上传,上传指定变量的内存值作为object的内容 */ public function putObject($imgPath,$obje ...
- 阿里云OSS文件上传封装
1.先用composer安装阿里云OSS的PHPSDK 2.配置文件里定义阿里云OSS的秘钥 3.在index控制器里的代码封装 <?php namespace app\index\contro ...
- 阿里云oss视频上传不能在线播放,js,javascript,在线播放器,插件
网页视频播放插件 发现阿里云oss储存,上传了视频不能在线播放. 解决方法:使用插件播放即可解决. <html> <head> <meta charset="u ...
随机推荐
- 9.6 2020 实验 1:Mininet 源码安装和可视化拓扑工具
一.实验目的 掌握 Mininet 的源码安装方法和 miniedit 可视化拓扑生成工具. 二.实验任务 使用源码安装 Mininet 的 2.3.0d6 版本,并使用可视化拓扑工具生成一个最简 ...
- CGAL5.0.2 CMake过程记录
Zlib的INCLUDE_DIR 找到了,但是release_LIBRARY没有找到.不过没有影响generate. 打开build文件夹的CGAL.sln 文件,ALL_BUILD 生成,成功. 最 ...
- 容器之beanfactory抽丝剥茧系列一
1.总所周知,spring ioc功能实现的顶层接口就是BeanFactory.如下面类结构图 这张更加全面: 还有更加变态的 2.BeanFactory为最顶层接口,定义了最核心的需要实现的接口 p ...
- [BUUCTF]极客大挑战 2019EasySQL1 write up
顾名思义,简单的SQL注入! 先浅了解一下注入:SQL 注入(SQL Injection) 是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞. 主要原因是程序对用户输入数据的 ...
- windows 安装mysql57
1. 配置my.ini文件 在根目录下新建 "my.ini" 文件: 添加配置: [mysql] # 设置mysql客户端默认字符集 default-character-set=u ...
- SpringBoot3.0 + SpringSecurity6.0+JWT
JWT_SpringSecurity SpringBoot3.0 + SpringSecurity6.0+JWT Spring Security 是 Spring 家族中的一个安全管理框架. 一般We ...
- 使用vCenter对ESXi主机进行补丁升级
使用vCenter 对ESXi 主机进行补丁升级 背景说明:公司内部有许多ESXi主机需要进行补丁升级,记录一下通过vCenter对ESXi主机进行补丁升级的过程,也可以使用esxcli命令行方式: ...
- Java笔记第十一弹
TCP通信程序 TCP发送数据 //需要进行三次握手 import java.io.*; public class Main{ public static void main(String[] arg ...
- Javaweb知识复习--MyBatis+Mapper代理开发
一种持久层框架,主要用于简化JDBC MyBatis应用步骤 1.在数据库里面创建一个表 2.创建模块,导入坐标 就是新建一个Maven项目,在pom.xml里面导入mybatis相应导包依赖代码: ...
- 11.4 显示窗口(harib08d)11.5 小实验(hearib08e) 11.6 高速计数器(harib08f)
11.4 显示窗口(harib08d) 书P206 11.5 小实验(hearib08e) 书P208 11.6 高速计数器(harib08f) 书P209