報錯響應大緻如下
exception:None, status_code:, _ResponseInfo__response:<Response []>, text_body:{"error":"incorrect region"}, req_id:xxxxxxxxxxx, error:incorrect region, x_log:IO/
原因是根據空間所在區域不同,七牛的上傳域名也不同,華東、華南、華北、北美對應不同的上傳域名。指定的上傳域名不屬于空間所在區域對應的域名導緻報錯。
七牛的機房上傳域名連結
可以單獨指定某一域名進行上傳,也可以調用v1接口擷取該空間對應的上傳域名
https://uc.qbox.me/v1/query?ak={ak}&bucket={bucket}
傳回的響應格式如下
{
"ttl":,
"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":,
"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裡上傳域名的選擇流程為
- 第一次上傳調用v1或v2接口
- 将結果持久化儲存。不同語言有不同的實作方式。例如在本地臨時檔案夾下建立
json檔案并儲存(python);或者建立類buildFromUcRet儲存上傳值(java);或者指派給類裡的某個屬性(php)。.qiniu_pythonsdk_hostscache.json
- 下次再次上傳,優先從持久化的地方讀取上傳域名。
是以,如果使用最新sdk出現該報錯,可以從json檔案或者變量中檢視上傳域名是否屬于自己空間所在區域。如果不符合,檢查sdk版本,重新開機程式或删除臨時檔案。
ps:
python擷取臨時檔案目錄的方法
import tempfile
print(tempfile.gettempdir())