阿里云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 ...
随机推荐
- Android studio SDK配置
因为两个月前装过一次Android studio,所以完全按教程走不通. 已有Android studio的情况下,先在configue下配置SDK的位置,这里可能会报一个错,platforms不存在 ...
- 【随笔】Tomcat部署图片服务器Server.xml配置记录
在tomcat应用conf/server.xml文件的标签中添加下面内容: <Service name="imageService"> <!--分配8089端口 ...
- 排序方法-c语言
在接触过得排序算法中中,较为常见的有冒泡排序.选择排序.归并排序.快速排序法,他们的区别在于稳定性.时间复杂度.空间复杂度等: 现简单复习一下冒泡排序: 思路非常简单,逐个比较相邻的两个元素,前一个元 ...
- Ubuntu 20.24 安装Postgresql 14
1.运行环境 WSL+Ubuntu 20.04 2.安装Postgresql 进入Linux命令行,参照Postgresql官网安装指南 # Create the file repositor ...
- Linux中profile、bashrc、bash_profile之间的区别和联系(转)
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. 英文描述为: # /etc/pr ...
- Python库之os库和logging库的基本使用说明
使用os库操作目录及文件 使用os.sep() 方法获取系统分隔符 print(os.sep) 使用os.name()方法获取操作系统的平台类型 print(os.name) 使用os.getcwd( ...
- 【chatQA】nvm包版本管理
如何使用nvm来管理不同版本的 Node.js,然后使用不同的 Node.js 版本来运行不同版本的 React 应用? 要使用 nvm 来管理不同版本的 Node.js,可以按照以下步骤进行操作: ...
- 声网发布教育新品:灵动课堂全球覆盖学生超400万,互动白板首创H5课件
3月31日,全球实时互动云服务商声网Agora在北京举行教育产品发布会,正式发布教育行业首款aPaaS产品"灵动课堂",和首个支持H5课件的白板PaaS产品"互动白板&q ...
- Android 音视频 - MediaCodec 编解码音视频
我们知道 Camera 采集回传的是 YUV 数据,AudioRecord 是 PCM,我们要对这些数据进行编码(压缩编码),这里我们来说在 Android 上音视频编解码逃不过的坑-MediaCod ...
- cost function 成本函数
cost function 成本函数 cost function-成本函数 1.目标 :实现和探索具有一个变量的线性回归的成本函数. import numpy as np %matplotlib wi ...