curl返回(26)错误:无法读取本地文件,请求排查原因
curl报错
(26) Failed to open/read local data from file/application排查方案 执行以下curl POST上传命令时返回错误curl: (26) Failed to open/read local data from file/application,已通过du确认COVER、INSTRUMENTAL_FILE、EXIF_INFO对应的文件均存在且可正常访问,但报错依旧:
ALBUM_NAME="At The Soundless Dawn" SONG_FILE_NAME="01. Alone And Unaware The Landscape Was Transformed" ALBUM_FOLDER_NAME="/Users/canercetin/Git/audio-splitter/Red Sparowes/2005 - At The Soundless Dawn [Daymare Rec., PTCD-1020]" COVER="$ALBUM_FOLDER_NAME/Front.jpg" INSTRUMENTAL_FILE="$ALBUM_FOLDER_NAME/${SONG_FILE_NAME}.mp3" EXIF_INFO="$ALBUM_FOLDER_NAME/${SONG_FILE_NAME}_info.json" curl -v \ -F "cover=@$COVER" \ -F "name=$ALBUM_NAME" \ -F "instrumental=@$INSTRUMENTAL_FILE" \ -F "exifInfo=@$EXIF_INFO" \ -X POST \ "$UPLOAD_HTTP_SERVER/admin/albums/upload"
排查方向及解决方法
文件名/路径特殊字符未转义
路径和文件名包含空格、方括号([/])等特殊字符,bash解析时会将其当作通配符或语法符号,导致curl无法正确识别文件路径。
解决:给curl命令中的文件路径变量添加双引号包裹,确保特殊字符被正确解析。例如修改为:curl -v \ -F 'cover=@'"$COVER" \ -F 'name='"$ALBUM_NAME" \ -F 'instrumental=@'"$INSTRUMENTAL_FILE" \ -F 'exifInfo=@'"$EXIF_INFO" \ -X POST \ "$UPLOAD_HTTP_SERVER/admin/albums/upload"环境变量或curl版本问题
若UPLOAD_HTTP_SERVER变量未正确定义,会导致请求地址无效,可能间接触发文件读取错误提示;部分旧版本curl处理特殊字符路径存在bug。
解决:- 执行
echo $UPLOAD_HTTP_SERVER确认变量值是否为有效地址; - 更新curl到最新稳定版本后重新测试。
- 执行
文件/目录权限限制
du仅需读权限即可访问文件,但curl上传时可能受系统安全策略(如SELinux/AppArmor)或目录执行权限限制。
解决:- 确保文件所在目录对当前用户有执行权限:
chmod +x "$ALBUM_FOLDER_NAME"; - 临时关闭系统安全策略(如Linux下执行
sudo setenforce 0)测试是否为权限拦截导致。
- 确保文件所在目录对当前用户有执行权限:
变量扩展时的空格拆分
未加引号的变量在bash中会被按空格拆分为多个参数,导致curl仅读取路径的第一部分,最终找不到完整文件。
解决:所有包含空格的变量引用都用双引号包裹,避免参数被意外拆分。
内容的提问来源于stack exchange,提问作者canersevdiceginibekleyenoglu
相关产品推荐
相关产品推荐

