jancd/qiniu-developer-faq huggingface dataset:
#  断点续传下载功能说明

最近更新时间: 2017-08-30 16:47:13

### 1\. 接口说明

七牛云断点续传下载功能，其实是通过对标准的`HTTP`头部`Range`字段设置来实现的。具体设置方式请参考以下文档：

[下载过程说明](https://developer.qiniu.com/kodo/manual/1232/download-
process#download-mechanism)

### 2\. Demo演示

    
    
    liuhanlindemac:Downloads yishiyaonie$ curl -I -H "Range:bytes=1024-2048" http://liuhanlin-work.qiniudn.com/ceshimp4
    HTTP/1.1 206 Partial Content
    Date: Mon, 03 Aug 2015 03:29:49 GMT
    Server: nginx/1.4.4
    Content-Type: video/mp4
    Content-Length: 1025
    Accept-Ranges: bytes
    Access-Control-Allow-Origin: *
    Access-Control-Max-Age: 2592000
    Cache-Control: public, max-age=31536000
    Content-Disposition: inline; filename="ceshimp4"
    Content-Range: bytes 1024-2048/36650496
    Content-Transfer-Encoding: binary
    ETag: "lrMxbjcfPyC7F1siA6tF78B1IMAq"
    Last-Modified: Thu, 04 Jun 2015 06:37:13 GMT
    X-Log: mc.g;IO:1
    X-Reqid: QwIAAMDQ_OYl1vYT
    X-Qiniu-Zone: 0
    X-Via: 1.1 yangzhou150:8080 (Cdn Cache Server V2.0), 1.1 lsh200:10 (Cdn Cache Server V2.0)
    Connection: keep-alive
    

看一看下 “HTTP/1.1 206 Partial Content” 这个字段和 “Content-Length: 1025”。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  如何在空间下创建文件夹？

最近更新时间: 2017-08-30 18:14:20

在空间中不能创建文件夹，但是为了区分不同的文件，可以这么做:

文件名以 `2017/1/12/1.img` , 即创建这样的虚拟目录 `2017/1/12/` 做区分。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  设置 robots.txt 文件

最近更新时间: 2017-08-30 18:12:15

下面是设置robots.txt文件的地方和具体操作

请参考图片：

![blob.png](https://oi2ix6x26.qnssl.com/attachments/download/535256/00156efb948266be0399bae328da35e/)

![blob.png](https://oi2ix6x26.qnssl.com/attachments/download/535259/00156efb96170057045679f9c74a96b/)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  如何在 Xcode 导入七牛 objc-sdk

最近更新时间: 2019-01-04 17:55:21

## 一、 使用 pod 包管理工具导入（推荐方式）。

在项目跟目录创建 PodFile 文件，输入：

    
    
    platform :ios, "8.0" # 第一行指定平台和版本
    pod 'AFNetworking', '~> 3.0'
    pod "Qiniu", :git => 'https://github.com/qiniu/objc-sdk.git', :branch => 'AFNetworking-3.x'
    pod 'HappyDNS', '~> 0.2'
    

项目跟目录下执行 `pod install` ，成功后使用 xcode 打开新生成的 `Project.xcworkspace` 文件。  
参考：  
<http://www.yeolar.com/note/2015/01/02/cocoapods/>  
<http://guides.cocoapods.org/using/getting-started.html>

## 二、直接复制源码到项目

源码地址： <https://github.com/qiniu/objc-sdk>

  * 右键，选择添加文件到项目

![image](https://camo.githubusercontent.com/f6ac1d17dde8e0338a58e48f5c5901f37b1d2c94/687474703a2f2f3737666c76632e636f6d322e7a302e676c622e71696e697563646e2e636f6d2f6f626a635f746f5f6164642e6a70673f696d61676556696577322f322f)

  * 选择文件`Added folders` 选择 `Create groups`

![image](https://camo.githubusercontent.com/7f6e875424aa2dc3adc95af11a10575774ea409e/687474703a2f2f3737666c76632e636f6d322e7a302e676c622e71696e697563646e2e636f6d2f6f626a635f735f6164642e6a70673f696d61676556696577322f322f)

完成后：

![image](https://camo.githubusercontent.com/ff1555dcf8ff14ce4489c00f357e8e86bc120166/687474703a2f2f3737666c76632e636f6d322e7a302e676c622e71696e697563646e2e636f6d2f6f626a635f706167652e6a70673f696d61676556696577322f322f)

在 `Build Phases` \--- `Compile Sources` 中已自动添加了`*.m`文件

![image](https://camo.githubusercontent.com/b16f8797be465d521531d20355d8154f053aaa18/687474703a2f2f3737666c76632e636f6d322e7a302e676c622e71696e697563646e2e636f6d2f6f626a635f636f6d70696c652e706e673f696d61676556696577322f322f)

## 导入依赖（源码导入参考）

7.0.12 后依赖 `HappyDNS`: <https://github.com/qiniu/happy-dns-objc>
以上面相同方式导入`HappyDNS`的源码。

至此，可正常编译、运行项目。

**注意** ：

  * 若报 `Undefined symbols for architecture x86_64: "_crc32", referenced from:` ，项目中需导入 `libz.dylib`。(`Build Phases` \---`Link Binary With Libraries`)

  * 若报`"_res_9_ninit", referenced from: _setup_dns_server in QNResolver.o` 等， 

  * 项目中需导入 `libresolv.dylib`或`libresolv.9.dylib`。(`Build Phases` \--- `Link Binary With Libraries`)； 
  * 或 (`Build Settings` \--- `Linking` \--- `Other Linker Flags`) 添加 `-lresolv` 选项

  * 报 `Thread 1: EXC_BAD_ACCESS(code=1,address=0x180f4beb8)`类似错误，将 `QN` 打头的都设置 `arc` (`Build Phases` \--- `Compile Sources`)  
![image](https://camo.githubusercontent.com/6212bc5ad5e6e5e3afc862c53cf6d81139a6a623/687474703a2f2f3737666c76632e636f6d322e7a302e676c622e71696e697563646e2e636f6d2f6f626a635f6172632e6a7067)

## 链接错误

有客户导入sdk后会报链接错误 (linker command failed with exit code
1)，可以下载下这个打包好的文件，解压后直接导入工程使用

[点击下载zip](http://dn-odum9helk.qbox.me/QiniuStorageLibrary.zip)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  如何跑起 js sdk 中的 demo

最近更新时间: 2019-11-07 10:48:58

## 简介

官方的js sdk中有相关的实例，但是对于不熟悉node的人来说可能有些难以理解，本文来讲述一下  
  
  

## 1.使用处理好引入关系的压缩包

<http://osp19b87q.bkt.clouddn.com/example.zip>  
  
只需要下载后解压缩，打开index.html即可，效果参考 <http://jssdk.demo.qiniu.io/>

## 2.使用官方示例中的express来打开

下载地址 <https://github.com/qiniu/js-sdk/tree/master/test>  
  
  
进入根目录，执行以下命令  

  1. npm install  
  

  2. bower install  
  

  3. grunt  
  

  4. node demo/server.js  
  
  

建议在执行命令前可以全局安装 bower, grunt  
  
npm install bower -g  
  
npm install grunt -g  

使用这个方法需要配置ak和sk

    
    
    module.exports = {
        'AccessKey': '<Your Access Key>',  // https://portal.qiniu.com/user/key
        'SecretKey': '<Your Secret Key>',
        'Bucket': '<Your Bucket Name>',
        'Port': 19110,
        'UptokenUrl': 'uptoken',
        'Domain': '<Your Bucket Name>' // bucket domain eg:http://qiniu-plupload.qiniudn.com/
    };
    

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  私有空间的注意事项

最近更新时间: 2017-09-06 19:46:58

公有空间与私有空间的区别，在于 [下载私有资源](https://developer.qiniu.com/kodo/manual/1656) ，需要带有
[下载凭证](https://developer.qiniu.com/kodo/manual/1202) 。  
在七牛服务端 SDK 中，均有生成私有链接的 demo 。  
另外，访问时，还需注意以下几点：

  1. **测试域名不能用于私有空间。**  
测试域名的缓存时间不能更改，只能是默认的 1 个月。因此，即使签出的私有链接过期时间短于 1 个月，也有可能在链接第一次访问过了 1 个月后才会过期。

  2. **自定义域名必须开启回源鉴权。**  
私有空间的自定义域名必须开启
[回源鉴权](https://developer.qiniu.com/fusion/manual/3930)(私有空间的域名，开启回源鉴权将自动填充成私有空间的规则，无需手动输入)。这是因为，自定义域名的缓存过期时间也有可能和私有链接的过期时间有矛盾，且默认的缓存策略是带问号参数缓存。  
如果**不** 开启，可能会带来以下问题：

     * CDN 缓存时间长于私有链接过期时间，导致私有签名过期后仍可访问。
     * 访问时如果每次访问签出的链接不同，由于默认的缓存策略是带问号参数缓存，于是每次访问都回源，不会命中缓存，严重影响访问性能。 
  3. **播放 hls 文件需要使用 pm3u8 服务。**  
播放 hls 文件时，需要用 [pm3u8](https://developer.qiniu.com/dora/manual/1292) 服务，对 m3u8
文件列表里的 ts 链接做签名。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  视频教程--qshell批量删除文件

最近更新时间: 2019-01-04 17:55:59

#### qshell 工具批量删除使用教程

  

[qshell batchdelete(http://dn-
odum9helk.qbox.me/spjc/avthumb/batchdelete.mov.mp4)](http://dn-
odum9helk.qbox.me/spjc/avthumb/batchdelete.mov.mp4)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  带图片样式的私有空间文件授权

最近更新时间: 2017-09-30 17:44:53

# 带图片样式的私有空间授权

本文介绍了当使用了拼接了数据处理或者图片样式如何进行签名授权。

私有资源下载是通过 HTTP GET 的方式访问特定的 URL。私有资源 URL 与公开资源 URL 相比只是增加了两个参数 `e` 和
`token`，分别表示过期时间和[下载凭证](https://developer.qiniu.com/kodo/manual/download-
token)。一个完整的私有资源 URL 如下所示：

    
    
    http://<domain>/<key>?e=<deadline>&token=<downloadToken>
    

当使用了七牛的实时数据处理功能或者拼接了图片样式时在 sdk 中进行签名授权时需要带拼接参数进行一起进行签名授权。不能在原文件签名后进行拼接参数。

如 私用空间中的文件为

原文件： <http://xxx.qiniu.xxx/qiniu.jpg>  

数据处理： <http://xxx.qiniu.xxx/qiniu.jpg?imageslim>  

图片样式： <http://xxx.qiniu.xxx/qiniu.jpg-style>  

文件另存下载 <http://xxx.qiniu.xxx/qiniu.jpg?attname=lhs.jpg>  

**正确的使用：**[http://xxx.qiniu.xxx/qiniu.jpg?imageslim&e=xxxx&token=xxxx](http://xxx.qiniu.xxx/qiniu.jpg?imageslim&e=xxxx&token=xxxx)****

**错误的使用：**[http://xxx.qiniu.xxx/qiniu.jpg?e=xxxx&token=xxxxx?imageslim](http://xxx.qiniu.xxx/qiniu.jpg?e=xxxx&token=xxxxx?imageslim)****

  

**以 php-sdk 为例，其中的`baseUrl` 需要为拼接参数后的 url **

    
    
    <?php
    require_once __DIR__ . '/../autoload.php';
    use Qiniu\Auth;
    $accessKey = getenv('QINIU_ACCESS_KEY');
    $secretKey = getenv('QINIU_SECRET_KEY');
    // 构建Auth对象
    $auth = new Auth($accessKey, $secretKey);
    // 私有空间中的外链 http://<domain>/<file_key>
    
    $baseUrl = 'http://xxx.qiniu.xxx/qiniu.jpg';
    //签名时的Url需要为拼接参数后的url后进行签名
    //$baseUrl= 'http://xxx.qiniu.xxx/qiniu.jpg?imageslim';
    //$baseUrl = 'http://xxx.qiniu.xxx/qiniu.jpg-style';
    //$baseUrl = 'http://xxx.qiniu.xxx/qiniu.jpg?attname=lhs.jpg';
    
    // 对链接进行签名
    $signedUrl = $auth->privateDownloadUrl($baseUrl);
    echo $signedUrl;
    

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  七牛上传 crc32 校检说明与用法

最近更新时间: 2017-08-23 16:43:27

首先关于 crc32
的相关概念可以参考这个文章详细介绍：[CRC32](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)

七牛这边上传设置 crc32 之后，上传前会先计算本地文件的 crc32，然后和上传到七牛后文件的 crc32
进行对比，如果两者不同的话就不会保存并且会返回 406：上传的数据 CRC32 校验错误。

我们不同的 SDK 用法都是类似的，就是在上传的时候设置 checkCrc 参数为 true 就可以了。  
比如 java sdk 里面上传的 put 方法里面将 checkCrc 设置为 true 就可以了：  
public Response put(XXXX data, String key, String token, StringMap params,
String mime, **boolean checkCrc** ) throws QiniuException

具体可以参考七牛这边关于设定 crc32 之后计算 crc32 以及参数传递的方法： <https://github.com/qiniu/java-
sdk/blob/43713ccf93cf17fd21ddd919434e1df96d291ead/src/main/java/com/qiniu/storage/FormUploader.java#L78-L99>

    
    
    private void buildParams() throws QiniuException {
            params.put("token", token);
            if (key == null) {
                fileName = "filename";
            } else {
                fileName = key;
                params.put("key", key);
            }
            if (checkCrc) {
                long crc32 = 0;
                if (file != null) {
                    try {
                        crc32 = Crc32.file(file);
                    } catch (IOException e) {
                        throw new QiniuException(e);
                    }
                } else {
                    crc32 = Crc32.bytes(data);
                }
                params.put("crc32", "" + crc32);
            }
        }
    

下面是关于 java sdk 的简单的 demo：

    
    
    public class UploadWithCrc32 {
    
        String ACCESS_KEY = "AK";
        String SECRET_KEY = "SK";
        Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
        UploadManager uploadManager = new UploadManager();
    
        // 设置指定上传策略
       public String getUpToken(){
            return auth.uploadToken("phpdemo", null, 3600,null);
        }
    
       public void upload() throws IOException{
           String FilePath = "/Users/dxy/sync/aaa.jpg";
           try {
               //设置验证crc32
                Response res = uploadManager.put(FilePath, null, getUpToken(), null, null, true);
                System.out.println(res.bodyString()); 
           } catch (QiniuException e) {
               Response r = e.response;
               // 请求失败时简单状态信息
               System.out.println(r.toString());           
           }
       }
    
        public static void main(String args[]) throws IOException{
    // //可以根据七牛的计算crc32算法打印出crc32的值
    // File f=new File("/Users/dxy/sync/aaa.jpg");
    // System.out.println(Crc32.file(f));
    
            new UploadWithCrc32().upload();
    
        }
    

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  webp 和 webm 格式图片上传后无法正常显示

最近更新时间: 2017-08-30 15:20:53

如果webp和webm格式文件上传后无法正常显示，可能是由以下原因导致：

    
    
    由于 webp 和 webm 都是由 Google 提出的图片和视频的编码格式，所以在 Chrome 浏览器上能得到很好的支持，其他浏览器不一定支持。
    

如果Chrome浏览器无法正常打开webp或者webm文件，可以去七牛开发者平台[https://portal.qiniu.com](https://portal.qiniu.com/)
通过前缀搜索资源，检查资源的mimeType，若不正确则手动将其修改为`image/webp`或者`video/webm`

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  如何修改链接中的默认域名？

最近更新时间: 2017-08-30 17:59:26

**按照如下方式修改：**

![](https://dn-odum9helk.qbox.me/FshPpkYtLI5AyIq0KywSxxc0bKYe)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  文件夹问题

最近更新时间: 2017-08-30 09:48:07

## **问题描述** ：

调用mkzip接口在压缩包内出现文件夹和qshell下载出现文件夹

## **问题原因** ：

由于七牛空间中没有文件夹的概念，所以在上传时可以指定前缀进行区分或者是批量上传时将相对路径的文件夹设置为文件前缀，但是在使用qshell进行批量下载和调用mkzip接口对空间文件进行压缩时会自动将文件前缀相同的文件并入到同一个文件夹中

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  统计日志

最近更新时间: 2017-08-30 18:40:24

# 1 首先要有 linux 系统或者 mac 系统

# 2 下载日志到本地

# 3 统计最热资源的访问次数排名前 20

    
    
    $ zcat qwe.gz | awk '{a[$7]+=1} END{for (i in a) print a[i] " ==> " i}' | sort -rn | head -20
    

# 4 统计访问 ip 的前 20

    
    
    $ cat part01.txt | awk '{a[$1]+=1} END{for (i in a) print a[i] " ==> " i}' | sort -rn | head -20
    

# 5 查看某个文件的 ip 访问次数统计（例如文件名字叫 windows）

    
    
    $ cat part01 |grep Windows| awk '{a[$1]+=1} END{for (i in a) print a[i] " ==> " i}' | sort -rn | head -20
    

# 6 cdn 下载统计访问错误码分布

    
    
    $ cat install.banban.im.cn.log |awk '{if ($10!=20000) {a[$10]++;s=NR}} END {for (i in a) {print a[i],i,a[i]/s*100 "%"}}'|sort -rn
    

# 7 IO 下载统计访问错误码分布

    
    
    $ cat 14.215.165.50.log |awk -F '\t' '{if ($8!~/20000/) {a[$8]++}} END {for (i in a) {print a[i],i,a[i]/NR*100 "%"}}'|sort -rn
    

# 结果演示

![这里写图片描述](http://img.blog.csdn.net/20150312162841827)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  七牛的 key-value 存储系统跟 NoSQL 数据库系统有什么区别？

最近更新时间: 2017-08-30 18:13:22

七牛云存储是一个 key-value 形式的数据存储系统，最近几年在数据库领域兴起的 NoSQL 也是 key-value 数据存储系统，它们之间有何差别？

从逻辑上讲，这两种存储系统是很类似的，都是一个键（key）对应一个值（value）。在七牛云存储的 key-value 系统中，可以把这个 “键（key）”
理解为文件名，把 “值（value）”
理解为文件，他们在云端单独存放。也即，七牛这样的云存储系统存放的是文件，用户要访问某个文件的时候，告诉云端它的文件名就可以了，云端就会把这个文件（的内容）返回给用户。

而 NoSQL 系统是数据库系统的一种类型，它也以 key-value 的形式存放数据，只不过它存放的一般不是文件，而是文本。比如 “名字——张山”
这样一个 key-value 数据，其键（key）就是 “名字”，其值（value）就是 “张山”。

一般而言，这两种 key-value
系统是互补的，是在一起使用的。因为，一般而言，一个产品既会有文本类型的数据，也会有文件类型的数据。七牛云存储这种系统就用来存放文件类型的数据，而 NoSQL
这种存储系统则用来存放文本类型的数据。

举例：你注册微博账号的时候，需要填写用户名、邮箱以及手机号等注册信息，还要上传头像。像用户名、邮箱以及手机号等文本，就是存放在数据库里的（比如存放在
NoSQL
类型的数据库系统中）。而头像是保存在七牛云存储这样的系统中的。你发微博的时候，如果带上了图片，那么微博中的文本和图片的地址都是存放在数据库中的，而图片本身则是存放在七牛云存储这样的系统中。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  获取空间当前的存储总量

最近更新时间: 2017-08-30 17:41:46

调用list接口 <https://developer.qiniu.com/kodo/api/1284/list，>
会返回空间内文件的相关信息，其中包括文件的大小fsize，对每个文件的fsize相加即可获得空间的当前存储总量

![](https://dn-odum9helk.qbox.me/FnVnJeHQKCh4cL_ODOqR5OLJ8acU)

以python代码为例：

    
    
    # -*- coding: utf-8 -*-
    from qiniu import Auth
    from qiniu import BucketManager
    
    access_key = ''
    secret_key = ''
    
    q = Auth(access_key, secret_key)
    bucket = BucketManager(q)
    
    bucket_name = ''
    # 前缀
    prefix = None
    # 列举条目
    limit = 200
    # 列举出除'/'的所有文件以及以'/'为分隔的所有前缀
    delimiter = None
    # 标记
    marker = None
    
    total_fize = 0
    
    ret, eof, info = bucket.list(bucket_name, prefix, marker, limit, delimiter)
    for i in ret['items']:
        print(i['fsize'])
        total_fize += i['fsize']
    
    print(total_fize)
    

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  上传过程中，在使用魔法变量的情况下验证 app callback token

最近更新时间: 2018-12-29 15:59:26

上传过程中，在使用[魔法变量](https://developer.qiniu.com/kodo/manual/1235/vars#1)的情况下验证
[callback token](https://developer.qiniu.com/kodo/manual/1653/callback)
，此时签名的内容应该以魔法变量被替换前为准还是以魔法变量被替换后为准？

七牛的上传服务器 callback 客户的 app 服务器时会带有一个 `hmac_sha1` 签名，签名是针对最终请求来做的。

所以对于上面的问题，七牛的上传服务器先替换魔法变量的值，再对 callback 请求做签名。

可以参考：

  * [上传策略](https://developer.qiniu.com/kodo/manual/1206/put-policy)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  上传下载及管理凭证的生命周期

最近更新时间: 2017-08-22 15:42:50

七牛目前有三种凭证：[上传凭证](https://developer.qiniu.com/kodo/manual/upload-
token)、[下载凭证](https://developer.qiniu.com/kodo/manual/download-
token)、[管理凭证](https://developer.qiniu.com/kodo/manual/access-token)。

其中：

  * 上传凭证和下载凭证的算法均包含过期时间，过期时间在签名时指定。
  * 管理凭证是根据请求内容签出的，没有过期时间。
  * 服务端验证过期时间使用的是[Unix时间戳](https://developer.qiniu.com/kodo/glossary/u#unixtime)。如果出现 token 意外超时，优先确认是不是过期时间使用了 Unix 时间戳造成的。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  使用Angular构建上传

最近更新时间: 2017-09-21 13:25:56

表单上传需要通过formdata构建表单即可，配合Angular Material或者其他组件库，可以起到比较好的效果，建议在Angular中使用这种方法

    
    
            const inputEl = this.el.nativeElement.firstElementChild;
            if (inputEl.files.length === 0) {
                return;
            };
            const files: FileList = inputEl.files;
            for (let i = 0; i < files.length; i++) {
                const formData = new FormData();
                formData.append('file', files[i]);
                formData.append('key', files[i].name);
                formData.append('token', this.uptoken);
                this.loading = true;
                const request = new HttpRequest(
                    'POST', this.upHost , formData,
                    {reportProgress: true});
                this.http.request(request)
                    .retry(3)
                    .subscribe(
                        event => {
                            if (event.type === HttpEventType.UploadProgress) {
                                this.loading = true;
                                this.percentDone = Math.round(100 * event.loaded / event.total);
                                this.progress = `File is ${this.percentDone}% uploaded.`;
                            } else if (event instanceof HttpResponse) {
                                this.progress = `${event.body['key']} is uploaded`;}});
                this.loading = false;
            }
        }
    

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  使用镜像存储注意事项

最近更新时间: 2019-10-17 20:31:24

# 使用镜像存储，更新源站文件后，如何访问最新文件？

参考 [镜像存储刷新缓存方法](https://developer.qiniu.com/fusion/kb/4215)

# 镜像源地址设置和拉取资源链接形式

拉取资源链接为：镜像空间绑定的加速域名 +（源站链接-镜像源地址设置部分）

例如：

源站资源链接：http(s)://sourceDomain/image/123.jpg

加速域名：a.b.com

  
  
若镜像源地址设置为：http(s)://sourceDomain/

则拉取资源链接：http(s)://a.b.com/image/123.jpg

  
  
若镜像源地址设置为：http(s)://sourceDomain/image

则拉取资源链接：http(s)://a.b.com/123.jpg

# 回源请求的User-Agent

回源源站时，请求会携带固定的User-Agent信息：`<RegionID>-qiniu-imgstg-
spider-1.0`，RegionID为华东z0、华南z1、华北z2、北美na0、东南亚as0。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  上传报文组装

最近更新时间: 2018-11-21 18:59:36

本文介绍一些因特殊情况需要自行组装上传报文时遇到的问题

### 正确的报文

    
    
    POST  HTTP/1.1
    Host: up.qiniup.com
    Cache-Control: no-cache
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
    
    ------WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="file"; filename=""
    Content-Type: 
    
    
    ------WebKitFormBoundary7MA4YWxkTrZu0gW
    Content-Disposition: form-data; name="token"
    
    FMVCRs2-LO1ivRNi4l7mEZE6ZDvPv-519D12kZCO:TMxdqAM3QilkUuZu6pIfoHa5Y2A=:eyJzY29wZSI6InJ0Y3Rlc3QiLCJkZWFkbGluZSI6MjUwMzI3NDkyOX0=
    ------WebKitFormBoundary7MA4YWxkTrZu0gW--
    

  

### 错误一

invalid media parameter

### 可能原因

  1. boundary之间有换行符
  2. boundary中有“=”

### 解决方法

建议在boundary中不要采用特殊字符

  

### 错误二

body/mutipart: NextPart: EOF;UP/400

### 可能原因

报文中指定的Content-Length值有误

### 解决方法

取消报文中的这个字段

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  存储空间遇到 404 文件不返回 404 状态码

最近更新时间: 2017-08-30 18:01:48

当文件不存在或者访问不到时，返回一个404页面，如果要求响应状态码必须是非404时应如何操作呢？

这里举一个返回 301 状态码的例子。

# 步骤一 404页面设置

点击空间设置 -> 404 页面设置，如下图：

![](https://dn-odum9helk.qbox.me/FsViFJIbwFtUK-1PRCrVECJT4b5G)

设置完成后，内容管理会自动生成一个叫 errno-404 的文件

注：errno-404 是在空间设置的 404 文件的文件名，为系统默认，不可修改。

![](https://dn-odum9helk.qbox.me/FjhnHJ3L3-TOFqA88M9NdwEcPdZx)

这时候再访问不存在的资源会返回设置好的 404 图片，如图：

![](https://dn-odum9helk.qbox.me/FqXDxeyvWAst2NyVc_RW0Bc07Bq2)

# 步骤二 下载工具

下载 [qrsctl 工具](https://developer.qiniu.com/kodo/tools/1300/qrsctl)，加入系统环境参考如下：

    
    
    # LINUX 系统
    ➜  Downloads mv qrsctl-v3.2.20170501 qrsctl
    ➜  Downloads chmod +x qrsctl
    ➜  Downloads sudo mv qrsctl /usr/local/bin
    
    # 新打开一个终端执行
    ➜  ~ qrsctl
    
    Usage:
      qrsctl [-l|d|lan|it|-f <hostFile>] -v login <User> <Passwd>                                               - Login
      qrsctl [-l|d|lan|it|-f <hostFile>] -v info                                                                - Show user information
      qrsctl [-l|d|lan|it|-f <hostFile>] -v appinfo [<AppName>]                                                 - Get application info
      qrsctl [-l|d|lan|it|-f <hostFile>] -v put -c <Bucket> <Key> <SrcFile>                                     - Put file
      qrsctl [-l|d|lan|it|-f <hostFile>] -v get <Bucket> <Key> <DestFile>                                       - Get file
      qrsctl [-l|d|lan|it|-f <hostFile>] -v stat <Bucket> <Key>                                                 - Stat file
      qrsctl [-l|d|lan|it|-f <hostFile>] -v cat <Bucket> <Key>                                                  - Cat file
      qrsctl [-l|d|lan|it|-f <hostFile>] -v del <Bucket> <Key>                                                  - Delete a file
    (省略部分，更多命令请自行查看。)
    

这里我们用到的命令是：

    
    
    qrsctl [-l|d|lan|it|-f <hostFile>] -v redirect <Bucekt> <Key> <RedirectUrl> [<RedirectCode>]              - Redirec
    

# 步骤三 设置跳转

# 1\. 登陆账号

首先需要用您的开发者帐号登录七牛云存储，登录成功后，才能进行接下来所有其他指令操作。

登录成功后，会话的有效期是 3600 秒（一个小时），一个小时后需要重新登录。

    
    
    qrsctl login <User> <Passwd>
    

参数 | 说明  
---|---  
User | 注册邮箱  
Passwd | 登录密码  
  
# 2\. 设置跳转

命令格式：

    
    
    qrsctl redirect <bucketname> errno-404 <finalurl> 301
    

例子：

    
    
    qrsctl redirect bucket01 errno-404 http://otshsz9r2.bkt.clouddn.com/apple.png 301
    

操作完后，curl 文件可以看到，返回了301

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  回调的测试网站

最近更新时间: 2018-10-14 14:23:19

# 首先 创建一个回调的url

[测试url](https://requestbin.fullcontact.com/)  
![](https://dn-odum9helk.qbox.me/FtdXkTmcImehLs6dmtIp92Px2mgs)

## 获取回调的url

![](https://dn-odum9helk.qbox.me/0b13e2805a1142c7bcbfd0e089da2267)

## 代码操作上传

上传的时候制定回调的body为key hash fname ext 所以回调的body会接收到这些信息

    
    
    use Qiniu\Auth;
    use Qiniu\Storage\UploadManager;
    $auth = new Auth(Config::ACCESS_KEY, Config::SECRET_KEY);
    $uploadMgr = new UploadManager();
    $bucket = "echohu";
    $key="kkkkkkdkd.mp3";
    $filePath ="./data.txt";
    $policy= array(
     'callbackUrl'=>'http://requestb.in/1m7htck1',//这里填写上面生成的url
       'callbackBody'=>'key=$(key)&hash=$(hash)&fname=$(fname)&ext=$(ext)'
    );
    $token = $auth->uploadToken($bucket, null, 3600*3600,$policy);
    $data= $uploadMgr->putFile($token, $key, $filePath);
    var_dump($data);
    

## 刷新下网页回调的信息则显示出

![](https://dn-odum9helk.qbox.me/8b81cad56be35ee23639f87333629e55)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  镜像存储与qshell工具相结合的数据迁移方案

最近更新时间: 2018-05-27 12:13:40

>
> 传统的数据迁移方案是：关掉网站原来的数据上传通道，所有数据变成只读，然后将所有数据上传到新的存储节点，再将上传入口改为新的存储节点，之后开放网站的上传功能。这样带来的问题是，数据迁移过程中，用户长时间不能进行上传操作，用户体验非常差。如何解决这个问题呢？

七牛云提供一套结合镜像存储和[qshell工具](https://developer.qiniu.com/kodo/tools/1302/qshell)的数据迁移方案，这套方案很好地绕开了传统迁移方案所带来的问题。先通过七牛的数据上传工具
qshell
将大量冷数据传到七牛平台上，并将数据访问地址切换成七牛的域名。由于用户生成的大量热数据还在自己的平台上，为了不出现数据丢失的情况，保证用户访问的流畅性，那就选用七牛的镜像存储服务吧。

七牛的镜像存储为整个数据迁移过程提供良好的过渡支持作用。当用户访问的数据不在七牛平台上时，镜像存储服务将回客户源站抓取数据，并保存在七牛平台上。故此，镜像存储对每个资源只需回源一次，后续访问的时候就不再回源了。另外，镜像存储与
qshell 数据同步工具一起使用，可以很好地将你的网站数据在无需中断服务的情况下迁移到七牛云。下面介绍一下具体数据迁移的步骤：

**假设源站所有的图片，放在一个叫 img.example.com 子域里。那么迁移的方式如下：**

  1. 在七牛上建立一个镜像 bucket，设定源站为 img.example.com。假设镜像 bucket 是 example-img，镜像 bucket 对应的域名为 example-img.qiniudn.com。

  2. 将所有对外使用的图片的域名改为 example-img.qiniudn.com。

  3. 如果网站数据是 UGC（用户产生内容）的，调整上传流程，传到七牛的镜像 bucket。这样源站就变成只读。

  4. 使用 qshell 同步工具将历史数据全部同步到七牛的镜像 bucket。

如此就完成整个迁移过程。此时 img.example.com 这个源站就可以废弃不用了。

你可能会问：如果我希望保留 img.example.com 这个对外的域名，而不是用 example-
img.qiniudn.com，可以么？答案是肯定的，不过会相对麻烦点，额外的操作如下：

  1. 您的源站需要指定为另一个域名（不能是 img.example.com 了），比如是 img-src.example.com，或者直接用 IP。

  2. 将 img.example.com 作为自定义域名绑定到七牛的镜像 bucket，此时 img.example.com上没有进行解析操作。自定义域名的生效时间最长为12小时左右。

  3. 测试镜像存储如你所愿正常工作后，将 img.example.com CNAME 到返回的地址上。这一步务必小心不要做错，因为这之后你的网站就通过七牛的镜像存储进行服务了。出于谨慎，建议先在本地修改 hosts 文件，将 img.example.com 指向 example-img.qiniudn.com 的 IP 地址进行测试。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  关于 list 超时及规避方式

最近更新时间: 2017-08-30 18:46:43

一个空间存放了大量的文件，这个数量很大，用户 list 出一部分文件批量删除空间的大量文件，然后再次调用 list 接口整个空间的文件名，list
失败并报超时错误。

**问题截图（Java版本）：**

![blob.png](https://oi2ix6x26.qnssl.com/attachments/download/801183/001577618de0aef5121b9e4463de8a1/?filename=blob.png)

遇到这个问题时，请修改如下配置文件的超时时间，改到 200s；或者使用
[qshell](http://developer.qiniu.com/code/v6/tool/qshell.html) 工具，使用
[listbucket](https://github.com/qiniu/qshell/wiki/listbucket) 命令对空间文件名打印输出。

![blob.png](https://oi2ix6x26.qnssl.com/attachments/download/801172/0015776180fdf67e8fae770f8799c3b/?filename=blob.png)

如果依然显示超时，原因如下：

在七牛的存储系统中，当用户调用 list 接口时，系统程序会先查看 marker
参数是否为空，如果为空，则起点位置设为整个空间的第一个文件，然后过滤整个空间的所有文件名并返回。

每当用户删除了大量文件，这时用户调用 list 接口，系统还是先查看 marker 字段是否为空，如果为空，则开始过滤已经被标记删除文件的信息，
**如果删除的文件很多，系统会过滤很长时间，list等待时间过长，导致list失败** 。

**规避方式：**

调用 list 接口时，设置 marker 参数，指定 list 标记位置，如此系统不会过滤之前被删除的文件，而之间从标记位置遍历下去。

**本文涉及接口：**

  * [资源列举(list)](https://developer.qiniu.com/kodo/api/list)

  * [资源删除(delete)](https://developer.qiniu.com/kodo/api/delete)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  列举条目时 delimiter 参数问题

最近更新时间: 2017-08-30 18:45:28

## 列举文件时delimiter参数问题

#### 参数描述：

调用listFiles方法列举指定空间的指定文件

//参数一：bucket 空间名; //参数二：prefix 文件名前缀 //参数三：marker 上一次获取文件列表时返回的marker
//参数四：limit 每次迭代的长度限制，最大1000，推荐值100 //参数五：delimiter
以指定参数为分隔符的所有公共前缀（模拟列出目录效果）。缺省值为空字符串

以 python 为例：

    
    
    # -*- coding: utf-8 -*-
    # flake8: noqa
    from qiniu import Auth
    from qiniu import BucketManager
    import json
    
    access_key = '...'
    secret_key = '...'
    
    q = Auth(access_key, secret_key)
    bucket = BucketManager(q)
    
    bucket_name = '...'
    #前缀
    prefix = None  
    #列举条目
    limit = 10    
    #列举'/'为分隔的所有前缀
    delimiter = '/'
    #标识
    marker ='eyJjIjowLCJrIjoibGludXjlhoXmoLgvbGludXgtMy4xMC4xMDQudGFyLnh6In0='
    ret, eof, info = bucket.list(bucket_name, prefix, marker, limit, delimiter)
    print(info)
    assert len(info.text_body) is not None
    

#### 输出结果：

【注】：输出结果包括不含delimiter中指定参数的key，以及delemiter指定参数为分隔符的公共前缀

#### 例：

    
    
    "{
        "marker": "eyJjIjowLCJrIjoicHl0aG9uL3RpbWVzaWduLnB5In0=",
        "items": [
            {
                "mimeType": "image/jpeg",
                "fsize": 66441,
                "hash": "Fme36Zks7NJVopii5OPfZ2PwHE8o",
                "key": "mtr.jpg",
                "putTime": 14563802730506377
            }
        ],
        "commonPrefixes": [
            "o1-vkxcxP1-28U_lCDR4OFOYDdc=/",
            "php/",
            "pili/",
            "python/"
        ]
    }
    

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  301重定向策略

最近更新时间: 2017-11-29 17:05:43

七牛的存储源站设置了301重定向的策略，当访问的资源不存在，七牛源站会执行301重定向策略，尝试去掉文件名前缀的多出的 "/"
来获取资源，保证访问的稳定性。

例子：

假设存储空间中有 a.jpg ，访问 <http://url/a.jpg> 属于正常情况。如果访问 <http://url//a.jpg>
，七牛存储源站会先查找 /a.jpg ，如果不存在 /a.jpg ，七牛源站就会尝试查找 a.jpg 。如果存在，就返回给客户端；如果不存在就返回
Document not found。

**注意** ：

1：如果存储空间设置了镜像存储，如果七牛源站查找 /a.jpg 不存在，会先去镜像源查找 /a.jpg
。如果镜像源存在资源，将资源同步到七牛，并且f返回到客户端；如果不存在，再执行七牛源站的 301 重定向策略。

2：如果存储空间存在 /a.jpg 资源，访问 <http://url/a.jpg> 不会重定向到 <http://url//a.jpg。>

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  windows 下添加 qshell 路径到环境变量

最近更新时间: 2017-08-30 17:28:52

### 配置环境变量方法：（以windows10为例）

1,右键“我的电脑”选择“属性”，找到高级系统设置。

![blob.png](https://oi2ix6x26.qnssl.com/attachments/download/930571/00157aa999c7f6ea840a4f59c88ed93/?filename=blob.png)

2,然后找到“高级”下的“环境变量”。

![blob.png](https://oi2ix6x26.qnssl.com/attachments/download/930598/00157aa9a15769e2c68420d2eeacbe7/?filename=blob.png)

3,在“系统变量”中选中“Path”，点“编辑”。

![blob.png](https://oi2ix6x26.qnssl.com/attachments/download/930605/00157aa9a3f75ed1bdfb36af02b88ef/?filename=blob.png)

4,在弹出页面选择“浏览”，找到qshell.exe所在文件夹点“确定”（win8及以下需要手动输入路径并用分号与之前的路径分隔开）。

![blob.png](https://oi2ix6x26.qnssl.com/attachments/download/930646/00157aa9b2433c1249383e27ff5637f/?filename=blob.png)

5,完成以上操作不要忘记还有两个“确定”需要点击。

添加系统变量后就可以在任意目录使用qshell了。

![blob.png](https://oi2ix6x26.qnssl.com/attachments/download/960302/00157b2dce9a4114e6253831d8acafd/?filename=blob.png)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  如何从测试域名过渡到自定义域名

最近更新时间: 2020-05-12 10:05:37

如果您的空间正在使用测试域名，需要绑定自定义域名来避免访问受限，您可以通过以下步骤进行域名的过渡。

# 空间绑定自定义域名的配置流程

  * 创建加速域名 
  * 保存加速域名为默认域名 
  * 添加cname解析 
  * 验证外链是否可以访问 
  * 替换旧外链  
`请勿跳过任何步骤`  

* * *

## 详细步骤

  1. 打开控制台中的[对象存储](https://portal.qiniu.com/bucket/privatets/index)，点击具体的空间名。  
点击 **绑定加速域名** 进入创建加速域名页面，您可以在跳转页面中绑定一个自定义域名到存储空间。  
![](https://dn-odum9helk.qbox.me/FoLxGFOG_PRaZmBX7xY-JTggDIp7)

* * *

  2. 创建域名过程中详细的参数解释可以参考[域名接入文档](https://developer.qiniu.com/fusion/manual/4939/the-domain-name-to-access。)
     * 域名类型如果没有特殊需求，选择**`普通域名`** 即可，如果您需要了解泛域名，请参考上面的[域名接入文档](https://developer.qiniu.com/fusion/manual/4939/the-domain-name-to-access。)。
     * 加速域名处建议填写的您**`未在使用`** 的二级或三级域名等，请勿轻易绑定www域名避免影响您的源站服务。  
（例如，您购买的主域名是example.com，二级域名可以为cdn.example.com，前缀可以自行定义即可）

     * 当您为存储空间绑定自定义域名的时候，源站配置**`默认为七牛云存储`** 即可.  
![](https://dn-odum9helk.qbox.me/FmwjAQ9hcPfiWqmWJ-e0_yu6KPZN)

* * *

  3. 点击 创建 后，您可以在控制台中的[对象存储](https://portal.qiniu.com/bucket/privatets/index)，点击具体的空间,在 空间概览 里看到该空间绑定域名的状态  
域名状态为 `“处理中”` 是处于创建状态，需要等待后台创建完成；  
域名状态为 `“等待CNAME”`
，需要您配置cname解析，解析步骤可以参考教程的步骤5，您也可以先操作步骤4，再执行步骤5，解析未配置的情况下，该域名暂时还无法用于访问；  
域名状态为`“成功”` ，域名可以正常使用，可以进入下一步骤。  
![](https://dn-odum9helk.qbox.me/FoeF0WHRlomgQCMb_zjkL6BbvVmL)

* * *

4.域名状态为 “等待CNAME” 或 “成功” 后，在 **内容管理** 中，**外链默认域名**
的下拉框里选中您需要绑定的自定义域名，点击按钮**保存默认域名** 。

  * 注意：域名状态为处理中时，无法设置为默认域名，请等待域名处理完成。  
![](https://dn-odum9helk.qbox.me/FlI9oy0uJJ7nIr048wQ7d1sHYDZs)

* * *

5.绑定成功后，需要配置您域名的cname解析，您可以根据控制台的引导文档，也可以直接点击[如何配置域名的CNAME](https://developer.qiniu.com/fusion/kb/1322/how-
to-configure-cname-domain-name)  
`注意：未配置解析或解析未生效，该域名将无法用于访问，确保解析生效后再使用新域名访问。`

6.**内容管理** 中，点击具体资源后的 **复制外链**
，即可获得新外链，您可以在浏览器中访问新外链，成功访问后，**`请在您调用旧外链的地方使用新外链替换`** 。  
如果您的新外链无法访问，请[检查域名是否配置成功](https://developer.qiniu.com/fusion/kb/5326/how-to-
check-whether-the-configuration-is-successful)。  
![](https://dn-odum9helk.qbox.me/Fi01HaNkIddUUxL7ifjZtsJmP4rX)

  7. 完成上述步骤后，通过自定义域名访问资源时，不会受到限制。

* * *

# 常见问题答疑

  * Q: 保存自定义域名为默认域名后，是否之前的链接就恢复访问了呢？  
A: 不是，保存自定义域名为默认域名后，新旧链接都可以正常访问，但是新生成的链接会通过自定义域名访问，而旧的链接依旧是通过测试域名访问，依旧会受到限制。

  * Q: 可以将同一个域名绑定到多个空间吗？  
A: 不可以，一个域名只能绑定一个空间，建议您绑定二级或三级域名，按照cname配置流程在厂商处配置解析即可。

  * Q: 是否可以不绑定自定义域名，申请一直使用测试域名呢？  
A: 不可以，测试域名仅供测试使用，不在SLA保障范围内，有效期30天，请勿用于线上环境。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  空间文件字节数为 0B

最近更新时间: 2017-08-30 18:00:25

表现：  
加载图片时显示成功，但是显示为空白；空间中的文件大小为 0B

原因：

  1. 七牛允许 0B 字节的文件存在。 
  2. 客户端上传时读取文件错误。

解决方法：

  1. 更新使用的客户端sdk，最新的sdk中已经禁止 0B 的文件上传。 
  2. 在上传策略中设置 fsizeMin 为1，保证上传的文件大于 1B 。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  为何没有“复制外链”的选项

最近更新时间: 2019-01-07 17:14:43

# 问题描述

没有复制外链选项的情况，如下图所示：

![pic1](https://dn-odum9helk.qbox.me/Fn76ShJZKCamQZv8h4crSI-UrP8Q)

# 原因分析

## 第一种情况：

![pic2](https://dn-odum9helk.qbox.me/FlBVsPVds-QkqV_lPYMnNTxPP6j8)  
当空间为**`私有空间`** 的时候，下载链接是需要加上临时的
[下载凭证](https://developer.qiniu.com/kodo/manual/1202/download-token)
进行下载，所以不提供复制外链的选项，需要自行生成，形式如下：

    
    
    [GET] http://<domain>/<key>?e=<deadline>&token=<downloadToken>
    

## 第二种情况：

![pic3](https://dn-odum9helk.qbox.me/FnliJ7JLWxqCMnySsNhpfoJAQNna)  
当空间设置中开启了 [**`原图保护`**](https://developer.qiniu.com/kodo/kb/1359/what-is-the-
original-protection) 的时候，也不会提供复制外链的选项

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  windows环境下安装qshell教程

最近更新时间: 2018-12-06 20:07:22

# 教程简介

本教程用于命令行初学者下载及添加环境变量，且能够运行简单的命令测试能否正常使用。

  * `注明`：涉及不同windows版本的操作系统，在添加环境变量操作有差异时，可以自行搜索如何在对应的操作系统中添加环境变量。
  * 本教程仅供示范，其他命令及详细操作请参考命令的[**说明文档**](https://developer.qiniu.com/kodo/tools/1302/qshell#9)。

# 安装操作步骤

  1. 在七牛开发者中心的sdk&工具中，选择并打开[**qshell文档**](https://developer.qiniu.com/kodo/tools/1302/qshell)

![](https://dn-odum9helk.qbox.me/FhGhldO0-UiHtc5MEu8azNduJl9E)

  2. 压缩包下载到本地后，将本操作系统对应的文件解压到文件夹中。

![](https://dn-odum9helk.qbox.me/FixcDzzNK9boVsNDmWt7BoH9hSNb)

  3. 右键打开文件属性，复制qshell文件所在目录。

![](https://dn-odum9helk.qbox.me/FmowYXMB1dTM-x1zi5jChWA4sc7N)

  4. 为了方便文件的使用，可以对文件重命名为 qshell.exe（如果显示时隐藏了后缀，修改为qshell即可）

![](https://dn-odum9helk.qbox.me/FhuYNtZn2_AHGcpmkdaifAeC7Q14)

  5. 按下键盘左下角的windows徽标键，打开搜索框输入 环境变量，选择编辑系统环境变量。（操作系统不符的情况下，此步骤也可以通过其他方式打开编辑）

![](https://dn-odum9helk.qbox.me/Fu1XObfpuI6imQ1TtSX3t5cO76Ot)

  6. 点击 编辑变量。

![](https://dn-odum9helk.qbox.me/Fr9JRfH6N5BiTc8D65wX1JVDckVD)

  7. 点击新建，输入变量名PATH，变量值为在第3步复制的qshell所在目录。添加后确认保存环境变量，保存系统设置。

![](https://dn-odum9helk.qbox.me/FhhrMABX82Et3Gb_eJuRlI8zeiwb)

  8. 在搜索中输入cmd，打开cmd窗口。

![](https://dn-odum9helk.qbox.me/FvCX-nSzwEbFOWmhFcqzs0PG6GCb)

  9. 正确安装并配置qshell后，输入qshell -v可以查看版本号。  
`注意：`  
如果没有对文件进行重命名，需要完整输入 qshell文件名 -v。  
如果报错无法识别的命令，请重新检查环境变量是否配置正确。

![](https://dn-odum9helk.qbox.me/FsuNHZI8i9lEGRwJba_evLEgoHgn)

  10. 使用qshell命令操作对应账号前需要进行登陆操作，登陆时需要ak sk信息，获取密钥对ak sk可以在控制台复制。

![](https://dn-odum9helk.qbox.me/FhBB4cC2AHTmW7QwRCE6I0ZncuSJ)

  11. 登陆时使用命令
    
        qshell account  填写您的ak  填写您的sk   name
    

注意：如果ak, sk, name首字母是"-"，需要使用命令qshell account -- 填写您的ak 填写您的sk
name（如图），可以避免把该项识别成命令行选项。

![](https://dn-odum9helk.qbox.me/FsipD0lRY5nZQ46Rm3Uflf_lic_a)

# rput命令的使用

rput命令用于上传大文件使用，命令参数详解参考[**rput说明文档**](https://github.com/qiniu/qshell/blob/master/docs/rput.md)

  1. 使用该命令行前需要先进行**登陆** ，登陆命令参考本教程第二部分安装操作步骤。
  2. 执行命令 
    
        qshell  rput  bucket名  上传后文件名   E:\qshelltool\download\amrts.amr
    

![](https://dn-odum9helk.qbox.me/FiVKn7JMr5dOFtHzSD2ZSYo3xA1j)

# qdownload命令的使用

qdownload用于批量下载空间内文件，命令参数详解参考[**qdownload说明文档**](https://github.com/qiniu/qshell/blob/master/docs/qdownload.md)

  1. 使用该命令行前需要先进行**登陆** ，登陆命令参考本教程第二部分安装操作步骤。
  2. 创建本地配置文件，配置文件的书写可以参考命令文档。  
**注意** ：windows环境的配置文件中涉及的路径需要两个\防止被转义，例如 E:\\\qshelltool\\\download

![](https://dn-odum9helk.qbox.me/FruBRmWKnS9cp0o75ar3ldIhjwQN)

  3. 执行命令 
    
        qshell  qdownload  qdownload.txt
    

注意：配置文件参数在当前cmd命令行所在目录下时，可以直接输入文件名  
如果非本目录下，需要输入完整路径，如qshell qdownload E:\qshelltool\download\qdownload.txt

![](https://dn-odum9helk.qbox.me/FtbW7UKuroNlZEj4DH_Q7Wt9VDJo)

  4. 运行结果，保存路径不变的情况下会进行增量下载，详细日志信息可以在输出的log路径查看。

![](https://dn-odum9helk.qbox.me/FlGpwxmQ0lvojtb-U27UWGO7XWeF)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  七牛鉴权QiniuToken

最近更新时间: 2024-01-29 10:32:19

本文解释了生成七牛鉴权管理凭证的字符串(QiniuToken)的详细过程，共三步。

  * 参考[管理凭证](https://developer.qiniu.com/kodo/development_guidelines/1201/access-token)，直接使用七牛支持的服务端语言 SDK 管理凭证
  * 参考[上传凭证 __](https://developer.qiniu.com/kodo/manual/1208/upload-token)、[下载凭证 __](https://developer.qiniu.com/kodo/manual/1202/download-token)，了解相关凭证的构造

# 准备工作：获取密钥（AK／SK）

生成七牛鉴权凭证信息的字符串，需要用到[密钥
__](http://developer.qiniu.com/article/developer/security/index.html#aksk)，密钥包含AccessKey/SecretKey。第一次使用七牛的API之前，用户需要在七牛开发者平台的密钥管理中取得密钥。

**注意：** 密钥（AccessKey/SecretKey）是非常重要且隐私的信息，泄露可能会造成严重的后果，请不要直接放在客户端。

具体步骤如下：

1）登录[七牛开发者平台 __](https://portal.qiniu.com/signin),

2）点击［个人面板］，选择密钥管理，进入七牛的密钥管理页面,  
![https://dn-odum9helk.qbox.me/2a083e0d2ef9a3c5cd59e3aa5c76e7f5](https://dn-
odum9helk.qbox.me/2a083e0d2ef9a3c5cd59e3aa5c76e7f5)

3）在七牛的[密钥管理页面 __](https://portal.qiniu.com/user/key),获取一对AccessKey/SecretKey。

# Step1. 构造待签名的 Data

待签名的data字符串由以下几个参数构成，拼接规则为:

    
    
    data = <Method> + " " + <Path> + "?<RawQuery>" + "\nHost: " + <Host> + "\nContent-Type: " + <contentType> + "\n\n" + <bodyStr>
    

注：<>里面的内容需替换成相应的变量。

参数 | 必选 | 说明  
---|---|---  
Method | Y | 支持 POST、PUT 和 GET 方式, 注意方法为全大写  
Path | Y | 请求路径。实际的请求路径详见各接口说明的请求包  
RawQuery | N | 如不存在则不用添加 ?<RawQuery>  
Host | Y | 请求域名，例如：atlab.ai  
contentType | N | 请求内容类型，如果参数为空，则不用加 "\nContent-Type: " + <contentType >  
bodyStr | N | 请求Body<bodyStr>: 如果 <Content-Length> 存在且 Body 不为空，同时 <Content-Type> 存在且不为空也不等于 “application/octet-stream”，才加上<bodyStr>  
  
**注意：无论 <Content-Length>和 <bodyStr> 是否为空，中间的 “\n\n” 都一定要加。**

示例代码为：

    
    
    data= <Method> + " " + <Path>
    
    if "<RawQuery>" != "" {
            data += "?<RawQuery>"
    
    }
    
    data += "\nHost: " + <Host> 
    
    if "<Content-Type>" != "" {
            data += "\nContent-Type: <Content-Type>"
    }
    
    data += "\n\n"
    
    if "<bodyStr>" != "" and 
       "<Content-Type>" != "" and 
       "<Content-Type>" != "application/octet-stream" {
    	      data += "<bodyStr>"
    
    }
    
    

人脸识别的待签名字符串示例为：

    
    
    POST /v1/face/detect
    Host: argus.atlab.ai
    Content-Type: application/json
    
    {"data": {"uri":"http://img3.redocn.com/20120528/Redocn_2012052817213559.jpg"}}
    
    

# Step2.计算 HMAC-SHA1 签名，并对签名结果做 URL 安全的 Base64 编码

    
    
    import hmac
    import base64
    import hashlib
    
    sign = hmac.new("<Your_Secret_Key>", data, hashlib.sha1).digest()
    
    encodedSign = base64.urlsafe_b64encode(sign)
    
    

# Step3.将 Qiniu 标识与 AccessKey、encodedSign 拼接得到管理凭证

    
    
    <QiniuToken> = "Qiniu " + "<Your_Access_Key>" + ":" + encodedSign
    

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  视频教程 - wp插件配置

最近更新时间: 2019-01-07 17:08:15

wp 插件如何配置

[WP插件配置视频教程](http://dn-odum9helk.qbox.me/wjw/spjc/6.mp4)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  视频教程 - 图片样式

最近更新时间: 2019-01-04 17:50:46

图片样式处理

<http://dn-odum9helk.qbox.me/spjc/4.mp4>

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  视频教程 - 镜像加速

最近更新时间: 2019-01-07 17:04:27

镜像加速  
七牛只支持静态加速，建议登录等操作不要放在七牛  
[镜像加速视频](http://dn-odum9helk.qbox.me/wjw/spjc/mirror-src.mp4)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  存储空间域名管理

最近更新时间: 2023-05-10 12:12:18

用户可以绑定自定义域名到存储空间，添加 CNAME 记录指向相应域名，然后通过自定义域名来访问存储空间里的文件。

  * 自定义 CDN 加速域名：为空间绑定自定义 CDN 加速域名，可以通过 CDN 边缘节点缓存数据，提高存储空间内的文件访问响应速度。
  * 自定义源站域名：绑定自定义域名为空间的源站域名，即可通过该域名直接访问存储空间内的文件。

**注意：按照中华人民共和国《互联网管理条例》的要求，所有需要绑定自定义域名的用户，必须提前将域名在工信部备案。**

# **自定义 CDN 加速域名**

Bucket 可以绑定 CDN 加速域名，利用 CDN 节点缓存数据，来实现存储空间内文件的加速访问。

  * 从空间列表点击任一空间名，进入空间管理界面。
  * 点击「域名管理」，在「自定义 CDN 加速域名」设置卡片单击「绑定域名」，即可打开空间的 CDN 加速域名绑定界面。

![](https://dn-odum9helk.qbox.me/FlbOmcInXftkuh4NEEhW8bOGzYfp)

  * 域名需要能通过 ICP 备案检测，然后按需设置域名的通信协议、使用范围、应用场景和缓存策略即可。域名需要添加 CNAME 记录解析到指定的域名。

![](https://dn-odum9helk.qbox.me/Fg-tpNBrUyaT2PZV7QntfvkjlPyB)

  * 绑定好的域名，会在空间的自定义 CDN 加速域名列表中展示。

# **自定义源站域名**

Bucket创建后，用户可以绑定自定义域名为其源站域名，然后使用自定义域名直接访问存储空间内的文件。

  * 从空间列表点击任一空间名，进入空间管理界面。
  * 点击「域名管理」，在「自定义源站域名」设置卡片单击「绑定域名」，即可打开空间的源站域名绑定界面。

![](https://dn-odum9helk.qbox.me/Fuzeg8miehYnbruL8TSB4eDq8PAY)

  * 域名通过 ICP 备案检测后即可绑定成功。域名需要添加 CNAME 记录指向存储空间所在区域对应的 CNAME 域名，才能通过自定义域名访问存储空间，各区域 CNAME 域名如下： 
    * 华东-浙江 iovip.qiniuio.com
    * 华东-浙江2 iovip-cn-east-2.qiniuio.com
    * 华北-河北 iovip-z1.qiniuio.com
    * 华南-广东 iovip-z2.qiniuio.com
    * 北美-洛杉矶 iovip-na0.qiniuio.com
    * 亚太-新加坡 iovip-as0.qiniuio.com
  * 绑定好的域名，会在空间的自定义源站域名列表中展示。

## **开启HTTPS访问**

用户可以为源站域名开通HTTPS访问并绑定SSL证书，证书需要先行托管至七牛云的 [SSL证书服务
__](https://portal.qiniu.com/certificate/ssl)

![](https://dn-odum9helk.qbox.me/FmwnXgR37Hiy11vy9B93iAo0ENyG)

## **设置防盗链**

为了防止数据被其他人盗链，可以设置空间防盗链功能：

  * Referer白名单，仅允许指定的域名访问资源；或黑名单，指定域名禁止访问资源。
  * 是否允许空Referer。如果不允许空Referer，则只有HTTP或HTTPS header中包含Referer字段的请求才能访问资源。

![](https://dn-odum9helk.qbox.me/FjJxOebNeTaahmRGeNZA0N-6KLVs)

## **验证域名所有权**

当您的域名被其他用户绑定时，可以通过验证域名所有权，强制解绑此域名。  
**说明：此步骤仅在绑定自定义源站域名提示域名冲突时可查看和操作。**

1、域名绑定冲突时，界面会提示系统依据域名信息生成的 TXT 记录。  
![](https://dn-odum9helk.qbox.me/Ftrx0QPKNYd3S-pPxpKWGp-NTfl0)  
2、在域名解析商处添加对应的 TXT 记录，信息如下：  
![](https://dn-odum9helk.qbox.me/FtfgdMD5mahs2U_96SNwUuPNs-Jd)

  * 记录类型：TXT
  * 主机记录：填写步骤1中显示的主机记录。
  * 记录值：填写步骤1中显示的值
  * 其他值保持默认  
3、在**绑定域名** 弹窗中，单击**我已添加TXT验证记录，提交** ，若系统验证检测信息通过，则会执行解绑。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  存储上传下载域名

最近更新时间: 2021-04-30 11:34:00

参考文档[存储区域 __](https://developer.qiniu.com/kodo/1671/region-endpoint-fq)

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  测试域名使用规范

最近更新时间: 2023-03-28 10:06:52

**如果您正在使用或将要使用七牛测试域名，请务必仔细阅读本内容！**  
七牛云测试域名是用户在创建云存储空间时系统自动生成的七牛域名，以 clouddn.com / qiniucdn.com / qiniudn.com /
qnssl.com / qbox.me 等结尾，此类域名仅供用户测试和体验七牛产品功能，不能用于正式生产环境。

为了确保测试域名的规范使用，保障七牛云用户的权益，我们将对测试域名加强管理，具体措施如下：

  1. 测试域名不得作为生产域名，如因不规范使用或被当作正式域名使用的，在使用期间导致的业务受损或其他类故障不在SLA保障范围内。  
（注意：域名类型是普通域名，不会受此限制）

  2. 不得使用测试域名存储、发布、传播违法违规内容。当测试域名下有非法资源时，该域名将被直接冻结并不予解封。如对七牛云及其他用户造成损害，七牛云保留进一步追责的权利。

  3. 自2020年2月14日起所有测试域名将禁止下载应用程序(**apk、ipa、exe、dmg等**)，如需使用请绑定自定义域名进行访问。

  4. 流量限制：测试域名每个自然日访问回源总流量限10GB，当日回源流量达到10GB后，将会禁止对新文件访问。

  5. 回收机制：  
a.
每个测试域名生命周期为30个自然日（已有测试域名自回收功能上线之日起算，新产生的测试域名自系统自动生成之日起算），超过30日系统将自动回收，回收即为域名删除。  
b. 在测试域名生命周期终结之前我们会邮件通知您，您也可以自行在 七牛云-管理控制台 的域名详情中查看测试域名剩余的回收时间。

  6. 为了您的正常业务不受影响，请您规范使用测试域名，并尽快[绑定自定义域名 __](https://portal.qiniu.com/cdn/domain/create)进行访问（如已绑定，请忽略）。

因测试域名不服务于生产环境，所以测试域名不在SLA保障范围内。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  刷新缓存的方法

最近更新时间: 2020-02-14 16:55:44

# 主动提交刷新缓存请求

提交刷新请求的方法有三种：

  1. 在 [七牛开发者中心](https://portal.qiniu.com) 左侧产品列表中找到 CDN ，进去后点击 [刷新预取](https://portal.qiniu.com/domain/refresh) 。  
按要求填写需要刷新的 URL，点击提交即可。  
![](https://dn-odum9helk.qbox.me/FrkJDjRPNk5NS09XJxM2Z7BixBI-)

  2. 工具刷新  
使用七牛云提供的 [qshell](https://developer.qiniu.com/kodo/tools/1302)
命令行工具，参考使用文档，先设置密钥，然后执行
[cdnrefresh](https://github.com/qiniu/qshell/blob/master/docs/cdnrefresh.md)
命令来刷新缓存。

  3. 通过API 接口提交刷新请求：  
七牛各服务端的 [SDK](https://developer.qiniu.com/sdk#official-sdk) 都提供了刷新缓存的方法。  
另附：[刷新接口文档](https://developer.qiniu.com/fusion/api/1229/cache-refresh)

**注：** 如果使用了 **镜像存储** ，不能直接刷新，需要参考
[镜像存储刷新缓存方法](https://developer.qiniu.com/fusion/kb/4215)  
提交刷新请求后 **10 分钟** 左右，刷新全网生效。  
刷新 **https** 域名下的链接，会同时刷新 **http** 和 **https** ，占用两次刷新额度。

# 通过携带随机 URL 参数刷新

## 实现方法：

例如，如果 <http://dn-odum9helk.qbox.me/resource/gogopher.jpg> 这个图片资源没有更新，可以在该 URL
后面加上问号随机参数的形式来让 CDN 强制刷新：<http://dn-
odum9helk.qbox.me/resource/gogopher.jpg?v=1234567> ，CDN 拿到这个 URL
后会强制回源站中取回最新的资源。

## 实现原理：

如果域名没有开启忽略 URL 参数，那么在 CDN 节点上，对于：  
<http://dn-odum9helk.qbox.me/resource/gogopher.jpg>  
<http://dn-odum9helk.qbox.me/resource/gogopher.jpg?v=1>  
<http://dn-odum9helk.qbox.me/resource/gogopher.jpg?v=2>  
这三个 URL 是独立缓存的。所以，如果携带之前没用过的参数访问，CDN 会强制回源站中取回最新的资源。

## 注意事项：

  1. 关闭忽略 URL 缓存的域名，才可以使用这种方法刷新。  
![](https://dn-odum9helk.qbox.me/FrxsUkwOt1hqHl6ztT7GNFN_9NS3)

  2. 若使用 <http://dn-odum9helk.qbox.me/resource/gogopher.jpg?v=1> 访问一次，不会刷新 <http://dn-odum9helk.qbox.me/resource/gogopher.jpg> 的缓存。所以如果要保证访问到最新的资源，需要携带之前没有使用过的参数。 
  3. 此方法适用于需要频繁更新的文件，为保证参数不重，可以在每次更新文件后，携带的参数 +1 ，或者取 unix 时间戳来作为参数。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  HTTPS 相关问题 FAQ

最近更新时间: 2020-02-14 16:55:46

Q1: 升级 https，是否影响 http 的访问？  
---  
不管是在域名升级 http 的过程中，还是升级 https 后，都不影响 http 的访问。  
  
  

Q2: 域名升级 https 后，流量费用有哪些改变？  
---  
查看七牛官网的 [七牛云价格方案](https://www.qiniu.com/pricing)，点击“CDN ”，可以看到流量计费的规则。  
其中，https 的域名，不管是用 http 协议访问，还是 https 协议访问，都是按照 https 的标准计费的。  
如果对费用还有疑问，可以拨打 400-808-9176 转 1 号线销售咨询。  
  
以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  CDN 节点 IP 的获取方法

最近更新时间: 2018-06-12 16:41:47

七牛 CDN （Content Delivery Network，内容分发网络）会将网站的静态资源发布到离用户最近的网络边缘。

当用户访问一个配置了七牛 CDN 的域名时，七牛的 CDN 智能调度系统会让用户解析到一个离他最近的 CDN 边缘节点。

于是，不同地区不同运营商的客户端访问同一个域名时，解析到的 IP 很大概率上是不同的。

另外，在中心城市（如上海电信网络），七牛 CDN 可能使用多个甚至多组节点覆盖。

同一终端在相同的网络环境下访问，两次访问解析到的 CDN 节点 IP 也有可能不同。

# 获取 CDN 节点 IP 的两种方法：

使用浏览器调试窗口查看 remote address 得到节点 IP 。 由于在相同网络环境下，两次解析的结果也有可能会解析到不同节点。

所以下面介绍的方法 1 不能保证一定能得到实际访问到的节点，而方法 2 是可以的。

## 方法一

用终端 ping 域名的方式，可以得到解析到的 IP 节点（以获取访问 [www.qiniu.com](http://www.qiniu.com)
的节点ip为例，客户需要根据自身情况更改域名，以获取访问对应域名的节点ip）：

![](https://dn-odum9helk.qbox.me/FhlSq8VdpTUvImvCTCfbtuD0yc2f)

## 方法二

下面介绍 chrome 浏览器获取 remote address 操作流程（以获取访问
[www.qiniu.com](http://www.qiniu.com) 的节点ip为例，客户需要根据自身情况更改域名，以获取访问对应域名的节点ip）：  
在页面空白区域点击右键 -> 检查 -> 点击 “network” -> 点击资源名

![](https://dn-odum9helk.qbox.me/Fve91BAfpRKpscF_V9qjndBD_hz6)

截图中红框即访问 [www.qiniu.com](http://www.qiniu.com) 根目录的 remote address ：

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  为什么做了 CNAME 解析还是显示请配置 CNAME

最近更新时间: 2018-01-02 15:49:20

通常有以下几种原因

# 场景一

用户绑定的加速域名为正在使用的网站域名，如：www.abc.com

## 问题原因

因为一个域名只能解析一次 A 记录或者 CNAME ，所以当用户在七牛绑定这种域名并增加一条解析是没效果的。

## 解决办法

起一个没用解析过的二级域名（可以根据业务命名），如 images.abc.com

# 场景二

## 问题原因

用户在绑定加速域名后做 CNAME 解析，CNAME 记录值填写错误导致解析无效

举例说明：域名 images.abc.com

在域名服务商系统里解析的时候，主机记录为 images ，记录值为 七牛提供的 iduxxxx.qiniudns.com 这样的地址

## 解决办法

解析完成后一般1分钟后就可以通过外链访问资源了，解析之后可以通过命令行`dig`命令查看线路是否配置好了。

# 场景三

## 问题原因

某些域名商（如百度、360）配置解析后，会自动开启域名商的 CDN 服务，此时用`dig`命令查询域名解析结果是 A 记录。

## 解决办法

如果可以正常访问文件，是可以忽略“等待 cname”的提示的。但更建议联系域名商，禁用域名商提供的 CDN 服务。

# 场景四

解析配置正确，且用`dig`命令查询，域名已经正确解析到七牛提供的 cname 地址，但仍显示等待 cname 。

## 问题原因

部分地区的 LocalDNS 未更新解析结果。  
域名解析记录的生存时间（TTL）一般为 10 分钟（如果修改过，可以手动修改回 10 分钟），所以解析修改后，需要等待 10 分钟左右， LocalDNS
的解析记录更新。但某些小运营商的 LocalDNS 服务器，不会严格遵守设置的 TTL 时间，即使解析时设置了 TTL 时间为 10
分钟，解析结果有可能会缓存数小时甚至数天。

## 解决方法

如果等待 10 分钟左右刷新页面，仍然显示等待 cname ，便可以确认是部分地区的 LocalDNS 未更新，此时只能等待解析结果更新。  
不过，这种情况下仅是少数地区的某些小运营商解析结果不对，绝大部分地区的解析是没有问题的。

# 最后

如果都确认了不是以上问题，给我们提交工单，技术支持会为您尽快排查原因和解决问题。

以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  域名配置 FAQ

最近更新时间: 2021-02-19 13:10:53

Q1：已经配置CNAME，为何还是提示请配置CNAME，CNAME应该如何正确配置？  
---  
CNAME 记录解析需要到域名提供商处配置，问题参考：[配置失败原因
__](https://developer.qiniu.com/fusion/kb/3884/why-did-the-cname-parsing-or-
display-please-match-cname)；更多配置请参考：[帮助文档
__](https://developer.qiniu.com/fusion/manual/1367/custom-domain-name-binding-
process)。  
  
  

Q2：时间戳防盗链是什么？如何实现？  
---  
参考文档：[时间戳防盗链 __](https://developer.qiniu.com/fusion/kb/1670/timestamp-
hotlinking-prevention)  
  
  

Q3：域名希望覆盖范围从大陆调整到海外，使用场景需要从图片小文件调整到点播，如何操作？  
---  
此类需求必须要提交工单，说明域名和具体的需求，由七牛工程师来调整。  
  
以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交
#  刷新预取 FAQ

最近更新时间: 2017-09-29 17:56:03

Q1：删除/覆盖了七牛空间里的文件，为什么访问链接还能访问到旧文件？  
---  
七牛空间里的文件，使用 CDN 来访问，而 CDN 是通过缓存来加速的。更新源站的文件后，需要
[刷新缓存](https://developer.qiniu.com/fusion/kb/1325) ，才可以访问到新文件。  
  
  

Q2：我已经提交了刷新请求，为什么还没有刷新成功？  
---  
提交刷新后，全网生效需要 10 分钟左右，可以在 [七牛开发者平台](https://portal.qiniu.com) 的
[刷新预取](https://portal.qiniu.com/domain/refresh) 界面，点击操作记录，来查看刷新进度。  
如果刷新状态异常，或者状态显示成功，但还是会访问到旧文件，请 [提交工单](https://support.qiniu.com/)。  
  
  

Q3：提交了 1 个刷新链接，为什么消耗了 2 个刷新额度？  
---  
刷新 https 域名下的链接，会同时刷新 http 和 https 的链接，消耗两次刷新额度。  
  
  

Q4：使用镜像存储，如何刷新缓存？  
---  
参考 [刷新缓存方法](https://developer.qiniu.com/fusion/kb/1325/refresh-the-cache-and-
the-effect-of-time#3) 一文中的 “使用镜像存储刷新缓存方法”。  
  
  

Q5：刷新和预取有什么区别？  
---  
刷新缓存：清除 CDN 节点缓存，从源站获取最新资源。  
文件预取：是在 CDN 节点没有资源缓存时预下载（如果节点缓存已存在，预取时不会覆盖）。  
  
以上内容是否对您有帮助？

* __
* __
* __
* __
* __

文档反馈 (如有产品使用问题，请[ 提交工单](https://support.qiniu.com/tickets/category))

提交