HarmonyOS鸿蒙Next中有预签名的应用文件上传不了;没预签名的文件可以上传,但是文件是不完整的

HarmonyOS鸿蒙Next中有预签名的应用文件上传不了;没预签名的文件可以上传,但是文件是不完整的 【问题描述】: 有预签名的应用文件上传不了:https://z1gc.obs.cn-south-1.myhuaweicloud.com:443/image_directory/FDSFDSFEWTVGGGRR.jpg?AccessKeyId=X4H5SMT8THLCOLIIMHYE&Expires=1766026435&Signature=P9c3oACVQa%2FPbiFrfVNkAPoGyxM%3D 没预签名的可以上传,就是文件是不完整的:http://z1gc.obs.cn-south-1.myhuaweicloud.com/image_directory/FDSFDSFEWTVGGGRR.jpg

【问题现象】: cke_3471.png

【版本信息】:deveco版本 6.0.0.858、api版本20

【复现代码】: cke_1438.png

【尝试解决方案】:ios端是用这种预签名的地址上传的,可以正常上传


更多关于HarmonyOS鸿蒙Next中有预签名的应用文件上传不了;没预签名的文件可以上传,但是文件是不完整的的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS Next中,预签名应用文件上传失败可能由签名验证机制导致。系统对预签名文件有更严格的完整性校验,若签名不匹配或文件被修改,上传会被阻止。未预签名文件可上传但不完整,通常是因为缺少必要的元数据或文件结构不符合规范。请检查文件签名状态及格式是否符合HarmonyOS Next的应用分发要求。

更多关于HarmonyOS鸿蒙Next中有预签名的应用文件上传不了;没预签名的文件可以上传,但是文件是不完整的的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


根据你提供的信息,问题核心在于使用预签名URL上传文件到OBS时失败,而未签名的URL虽然能上传但文件不完整。这通常与HarmonyOS Next的安全模型和网络请求处理方式有关。

主要原因分析:

  1. HTTPS与安全策略:你提供的预签名URL使用的是HTTPS (https://),而未签名URL是HTTP (http://)。HarmonyOS Next默认对网络请求有严格的安全要求。对于HTTPS请求,系统可能会检查证书、协议版本或主机名验证。预签名URL中可能包含特殊字符(如查询参数中的%2F),这可能在HTTPS的严格解析下引发问题,导致连接无法建立或请求被中断。

  2. 网络模块差异:HarmonyOS Next使用的网络栈可能与iOS不同。预签名URL通常包含了授权信息(如Signature参数),这些信息在传输过程中必须保持原样。如果网络库在发送前对URL进行了额外的编码、解码或规范化处理,可能会破坏签名的有效性,导致OBS服务器拒绝请求。

  3. 分块传输或重定向:对于未签名URL,OBS可能会返回一个重定向(如302)到实际的签名地址,或者支持分块上传。如果客户端没有正确处理重定向或分块传输,就会导致下载的文件不完整。而预签名URL是直接授权访问的,不涉及重定向,但如果请求本身因上述安全原因被阻止,就会直接失败。

排查与解决方向:

  • 检查网络权限与配置:确保你的应用在module.json5中正确声明了网络权限(ohos.permission.INTERNET)。对于HTTPS,HarmonyOS Next可能还需要确认目标域名的安全性。
  • 验证URL处理:在代码中打印出最终用于网络请求的完整URL,确保预签名URL中的查询参数(特别是Signature)没有被意外修改或截断。比较在HarmonyOS Next和iOS上发出的实际请求URL是否完全一致。
  • 使用系统网络库:确保你使用的是HarmonyOS Next标准的网络API(如@ohos.net.http)。避免使用可能修改请求的第三方库或自定义处理。
  • 捕获详细错误:实现更详细的错误日志捕获,包括HTTP状态码、响应头和可能的异常信息。预签名请求失败时,OBS通常会返回具体的错误码(如403签名错误、400请求无效),这能直接定位问题。
  • 测试简化案例:尝试对一个简单的文本文件使用预签名URL进行上传/下载,排除是否特定文件类型或大小的影响。同时,可以尝试在预签名URL中去掉非必要参数,进行最小化测试。

由于你提到iOS端相同预签名URL可以正常工作,因此重点应放在HarmonyOS Next环境下的网络请求安全策略和URL传输的完整性上。通过对比两端发出的实际网络请求包,应该能发现差异所在。

回到顶部