使用Stream Feeds无法上传图片的问题排查求助
排查GetStream Feeds图片上传时"token contains an invalid number of segments"错误
问题背景
我正在使用GetStream Feeds及stream_feed_flutter_core开发类Instagram应用,目前可向动态流添加活动、上传文件,但无法上传图片。
客户端与用户配置代码
final client = StreamFeedClient("apiKey", logLevel: Level.INFO);
final currentUser = await client.setUser( User( id: user2Id, data: {"name": user1Name, "profile_image": user2Image}), Token(token_2) );
图片上传逻辑
- 从相册选择图片得到XFile类型的
pickedFile - 上传方法:
uploadImage() async{ var imageUrl = await context.feedClient.images.upload(AttachmentFile(path: pickedFile.path)); }
API返回错误
{ "detail":"token contains an invalid number of segments", "status_code":403, "code":17, "exception":"NotAllowedException", "duration":"0.00ms", "more_info":"https://getstream.io/docs/api_error_responses" }
排查步骤
- 检查Token格式:GetStream用户Token为JWT格式,必须是
.分隔的3段字符串(Header.Payload.Signature)。确认token_2是否符合该格式,无拼写错误、字符截断或编码异常。 - 验证Token生成逻辑:用户Token必须通过后端服务用GetStream的Secret Key生成,禁止客户端直接生成或硬编码。确保后端生成时使用了正确的
user2Id,签名算法为HS256。 - 确认客户端Token关联状态:调用
client.setUser后,打印context.feedClient.currentUserToken,确认其值与后端生成的Token完全一致,无意外覆盖或重置。 - 对比文件与图片上传的Token差异:既然文件上传正常,检查两类上传操作使用的Token是否一致,排查图片上传逻辑中是否存在Token篡改的情况。
- 验证AttachmentFile参数:确认
pickedFile.path是图片的真实本地路径,且应用已获取iOS相册权限、Android存储权限。 - 用Dashboard生成的Token测试:临时替换
token_2为GetStream Dashboard中生成的对应用户Token,若能正常上传,说明问题出在后端Token生成逻辑。
内容的提问来源于stack exchange,提问作者Anupriya
相关产品推荐
相关产品推荐

