使用七牛的sdk上传报错:incorrect region

来源:互联网 发布:星星知我心演员表 编辑:程序博客网 时间:2024/05/22 07:59

报错响应大致如下

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里上传域名的选择流程为

  1. 第一次上传调用v1或v2接口
  2. 将结果持久化保存。不同语言有不同的实现方式。例如在本地临时文件夹下创建.qiniu_pythonsdk_hostscache.json json文件并保存(python);或者创建类buildFromUcRet保存上传值(java);或者赋值给类里的某个属性(php)。
  3. 下次再次上传,优先从持久化的地方读取上传域名。

因此,如果使用最新sdk出现该报错,可以从json文件或者变量中查看上传域名是否属于自己空间所在区域。如果不符合,检查sdk版本,重启程序或删除临时文件。

ps:

python获取临时文件目录的方法

import tempfileprint(tempfile.gettempdir())
阅读全文
0 0
原创粉丝点击