oss_put_object_from_file上传文件时:返回
aos_status_t *status;
status->code:-987
status->error_code:HttpIoError;
status->error_msg:read body failure;
这个是什么原因导致的?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的错误信息 status->code: -987
、status->error_code: HttpIoError
和 status->error_msg: read body failure
,可以判断问题可能与文件读取或网络传输相关。以下是可能导致该问题的原因及解决方法:
oss_put_object_from_file
方法需要从本地文件系统中读取文件内容。如果指定的文件路径无效、文件不存在或程序没有足够的权限访问该文件,则会导致读取失败。local_filename
参数指向的文件路径是正确的,并且文件存在。aos_str_set(&file, local_filename);
,请确认 local_filename
是一个有效的绝对路径或相对路径。HttpIoError
和 read body failure
错误通常与网络连接不稳定有关。例如,上传过程中网络中断或超时可能导致数据传输失败。endpoint
是否正确配置,确保能够正常访问 OSS 服务。access_key_id
或 access_key_secret
配置错误,或者 endpoint
不匹配。init_options
函数中的配置项是否正确,包括 endpoint
、access_key_id
和 access_key_secret
。aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
请确保这些环境变量已正确设置。
region
是否与 bucket
所属区域一致。aos_pool_t
)来管理资源。如果内存池未正确初始化或释放,可能会导致资源分配失败。aos_pool_create
初始化内存池后,正确释放资源:
aos_pool_destroy(pool);
aos_http_io_deinitialize();
根据上述分析,您可以按照以下步骤排查问题: 1. 检查文件路径和权限,确保文件可被正确读取。 2. 验证网络连接是否稳定,必要时切换到断点续传方式。 3. 确认 OSS SDK 配置项(如 endpoint
、access_key_id
等)是否正确。 4. 检查文件名是否包含特殊字符,尤其是中文字符,必要时进行编码转换。 5. 确保内存池管理正确,避免资源泄漏。
如果问题仍未解决,建议启用调试日志,查看更详细的错误信息,以便进一步定位问题。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。