Gallery3 REST API:上传新照片应POST至哪个URL?
先给你确认下:你用的这个端点/index.php/rest/item/1是正确的!根据Gallery3的REST规范,POST到item/{parent_id}端点就是用来在指定父项目(这里ID=1的应该是根相册)下创建新内容(比如图片)的,和文档里的示例要求完全匹配。
你能正常获取相册和照片,但上传时报failed to open stream: HTTP request failed!,说明基础的API连接、认证是没问题的,问题大概率出在上传请求的细节或者服务器配置上,给你梳理几个排查方向:
检查请求格式与参数
上传图片必须用multipart/form-data格式的请求,而且要正确传递文件字段和必要参数:- 确保请求里包含
file字段,对应你要上传的图片文件; - 可以额外带上
name参数设置图片的显示名称; - 举个curl的示例命令(你可以参考调整成你用的语言):
curl -X POST -F "name=我的测试图片" -F "file=@/本地路径/test.jpg" -b "session_id=你的会话Cookie" http://你的图库地址/index.php/rest/item/1
- 确保请求里包含
验证服务器端权限
服务器上Gallery3的上传目录(通常是var/albums/下的对应文件夹)需要有PHP进程的写入权限,如果权限不足,图库没法保存上传的图片,就会返回请求失败的错误。你可以联系服务器管理员或者自己检查目录权限设置。排查PHP上传限制
服务器的PHP配置可能限制了上传文件的大小:- 检查
upload_max_filesize和post_max_size两个参数,确保它们的值大于你要上传的图片大小; - 如果是小图片能上传、大图片失败,基本就是这个问题,修改php.ini后重启web服务器即可。
- 检查
确认目标相册的有效性
先通过GET请求/index.php/rest/item/1确认这个项目是相册类型(返回的JSON里type字段应该是album),只有相册才能作为上传图片的父项目,如果ID=1是个图片的话,肯定没法上传。查看服务器日志
去看Gallery3的应用日志(一般在var/logs/目录)或者web服务器的错误日志(比如Apache的error.log),里面会有更详细的错误信息,比如参数错误、文件写入失败的具体原因,能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者Kirkland

