天天看點

使用七牛的sdk上傳報錯:incorrect region

報錯響應大緻如下

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裡上傳域名的選擇流程為

  1. 第一次上傳調用v1或v2接口
  2. 将結果持久化儲存。不同語言有不同的實作方式。例如在本地臨時檔案夾下建立

    .qiniu_pythonsdk_hostscache.json

    json檔案并儲存(python);或者建立類buildFromUcRet儲存上傳值(java);或者指派給類裡的某個屬性(php)。
  3. 下次再次上傳,優先從持久化的地方讀取上傳域名。

是以,如果使用最新sdk出現該報錯,可以從json檔案或者變量中檢視上傳域名是否屬于自己空間所在區域。如果不符合,檢查sdk版本,重新開機程式或删除臨時檔案。

ps:

python擷取臨時檔案目錄的方法

import tempfile
print(tempfile.gettempdir())
           

繼續閱讀