需要技术支持加QQ:1016401546,说明来意
问题已解决,但是因为本人找过seafile官方群和官方技术支持客服,均未得到切确的答复和解决方案,并且新版本更新之后接口文档等一写文档没有及时更新。
故本人花费了很长时间来排查这个问题并解决了。
如需要本人技术支持的加QQ:1016401546。但是为有偿解决,费用不高,需要则加。
该问题不知道是否是版本bug,我是从6.2.5 升级到8.0.3 的,升级之后发现原来6.2.5 的api上传文件的接口用不了了。
后来重新安装一套逐个版本测试,发现从7.1.5 开始就无法使用,8.0.3也无法使用。其中7.1.5 开始就开始使用了python3版本。
原来的内容:
脚本调用api上传文件:返回成功(脚本内容查看文章最后)
[root@node2 yw]# ll 总用量 8 -rw-r--r-- 1 root root 1703 3月 4 10:33 aa.sh -rw-r--r-- 1 root root 3 3月 3 20:03 bb.txt [root@node2 yw]# bash aa.sh bb.txt test 调用的命令: curl -s -d "username=admin@qq.com&password=123456" http://172.16.88.220:8000/api2/auth-token/ | awk -F '"' '{print }' 获取到的token: ae4f7f2df0afa5904d467f40bb603e9fa2748c0f 获取到的上传URL: http://172.16.88.220:8082/upload-api/0e3a7f6e-1701-4810-9cfa-e94d8d023a88 c214f852857a483fd01c00e344f6e4353842c7a1[2021-03-04 10:39:17] - INFO: 上传文件bb.txt[成功]
上传后网盘可以看到:
因为7.0 开始不再对外开放8000端口,我通过nginx代理设置了域名iflytek.seafile.com,并且在页面上面改了SERVICE_URL 和 FILE_SERVER_ROOT 的值,测试页面上传正常。
api上传之前:
脚本调用api接口:返回成功
[root@node2 yw]# bash aa.sh cc.txt test 调用的命令: curl -s -d "username=admin@qq.com&password=123456" http://iflytek.seafile.com/api2/auth-token/ | awk -F '"' '{print }' 获取到的token: ae4f7f2df0afa5904d467f40bb603e9fa2748c0f 获取到的上传URL: http://iflytek.seafile.com/seafhttp/upload-api/ca7a910a-ccb6-486f-8952-a9f9d8e936bb 上传执行的命令: curl -s -H "Authorization: Token ae4f7f2df0afa5904d467f40bb603e9fa2748c0f" -F file=@cc.txt -F filename=cc.txt -F parent_dir=test http://iflytek.seafile.com/seafhttp/upload-api/ca7a910a-ccb6-486f-8952-a9f9d8e936bb -F replace=1 560eebe94ac507594a8323ddb803bbbd34e3eed8[2021-03-04 11:21:12] - INFO: 上传文件cc.txt[成功]
上传之后可以看到cc.txt文件:
调用api上传前:
脚本调用api接口:Permission denied
[root@node2 yw]# bash aa.sh dd.txt test 调用的命令: curl -s -d "username=admin@qq.com&password=123456" http://iflytek.seafile.com/api2/auth-token/ | awk -F '"' '{print }' 获取到的token: ae4f7f2df0afa5904d467f40bb603e9fa2748c0f 获取到的上传URL: http://iflytek.seafile.com/seafhttp/upload-api/72d512c9-c9a8-452f-bfa2-376c2823ea42 上传执行的命令: curl -s -H "Authorization: Token ae4f7f2df0afa5904d467f40bb603e9fa2748c0f" -F file=@dd.txt -F filename=dd.txt -F parent_dir=test http://iflytek.seafile.com/seafhttp/upload-api/72d512c9-c9a8-452f-bfa2-376c2823ea42 -F replace=1 {"error": "Permission denied."}[2021-03-04 11:28:21] - INFO: 上传文件dd.txt[成功]
最后是没有上传成功!!!!!!!!!
对比了页面上传的接口参数发现确实不一样:
8.0.3的post参数:
6.2.5的post参数:
#!/bin/bash # 要上载的文件名 filename=$1 # 要上传到资料库的哪个文件夹 res_path=$2 # seafile账号 username='admin@qq.com' # seafile密码 password='123456' # seafile资料库ID(可在页面上面查到) repo='cfba8d77-d77d-4fce-b489-fa54123e5afe' # seafile地址 seafile_url='http://172.16.88.220:8000' # 7.0 之后用nginx80端口代理 我的url是这样的 # seafile_url='http://iflytek.seafile.com' if [ $# -ne 2 ];then echo -e "ERROR: 参数错误,请检查!\nUsage: $0 /tmp/test.txt Xcode" exit fi # 获取账户的Token Token=`curl -s -d "username=$username&password=$password" $seafile_url/api2/auth-token/ | awk -F '"' '{print $4}'` echo -e "调用的命令:\ncurl -s -d \"username=$username&password=$password\" $seafile_url/api2/auth-token/ | awk -F '\"' '{print $4}'" echo "获取到的token: $Token" echo -e # 获取上传链接 upload_link=`curl -s -H "Authorization: Token $Token" -H 'Accept: application/json; indent=4' "$seafile_url/api2/repos/$repo/upload-link/" | awk -F '"' '{print $2}'` echo "获取到的上传URL:$upload_link" #echo $upload_link # 上传文件到seafile库的特定目录 echo "上传执行的命令:\n curl -s -H \"Authorization: Token $Token\" -F file=@${filename} -F filename=${filename} -F parent_dir=${res_path} ${upload_link} " curl -s -H "Authorization: Token $Token" -F file=@${filename} -F filename=${filename} -F parent_dir=${res_path} ${upload_link} if [ $? == 0 ];then upload_time=`date +"%F %T"` echo "[$upload_time] - INFO: 上传文件$filename[成功]" else upload_time=`date +"%F %T"` echo "[$upload_time] - ERROR: 上传文件$filename[失败]" fi