报错响应大致如下
exception:None, status_code:404, _ResponseInfo__response:<Response [404]>, text_body:{"error":"incorrect region"}, req_id:xxxxxxxxxxx, error:incorrect region, x_log:IO/404
原因是根据空间所在区域不同,七牛的上传域名也不同,华东、华南、华北、北美对应不同的上传域名。指定的上传域名不属于空间所在区域对应的域名导致报错。
七牛的机房上传域名链接
可以单独指定某一域名进行上传,也可以调用v1接口获取该空间对应的上传域名
https://uc.qbox.me/v1/query?ak={ak}&bucket={bucket}
返回的响应格式如下
{
"ttl":86400,
"http":{
"io":[
"http://iovip.qbox.me"
],
"up":[
"http://up.qiniu.com",
"http://upload.qiniu.com",
"-H up.qiniu.com http://183.131.7.18"
]
},
"https":{
"io":[
"https://iovip.qbox.me"
],
"up":[
"https://up.qbox.me",
"https://upload.qbox.me"
]
}
}
或者调用v2接口
https://uc.qbox.me/v1/query?ak={ak}&bucket={bucket}
返回的响应格式如下
{
"ttl":86400,
"io":{
"src":{
"main":[
"iovip.qbox.me"
]
}
},
"up":{
"acc":{
"main":[
"upload.qiniup.com"
],
"backup":[
"upload-nb.qiniup.com",
"upload-xs.qiniup.com"
]
},
"old_acc":{
"main":[
"upload.qbox.me"
],
"info":"compatible to non-SNI device"
},
"old_src":{
"main":[
"up.qbox.me"
],
"info":"compatible to non-SNI device"
},
"src":{
"main":[
"up.qiniup.com"
],
"backup":[
"up-nb.qiniup.com",
"up-xs.qiniup.com"
]
}
}
}
然后再选择想要上传的域名。
在七牛sdk里上传域名的选择流程为
.qiniu_pythonsdk_hostscache.json
json文件并保存(python);或者创建类buildFromUcRet保存上传值(java);或者赋值给类里的某个属性(php)。因此,如果使用最新sdk出现该报错,可以从json文件或者变量中查看上传域名是否属于自己空间所在区域。如果不符合,检查sdk版本,重启程序或删除临时文件。
ps:
python获取临时文件目录的方法
import tempfile
print(tempfile.gettempdir())