Completed
Pull Request — master (#293)
by
unknown
21:47 queued 19:59
created

UploadManager::putFile()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 47

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 32
CRAP Score 4.0032

Importance

Changes 0
Metric Value
cc 4
nc 4
nop 6
dl 0
loc 47
ccs 32
cts 34
cp 0.9412
crap 4.0032
rs 9.1563
c 0
b 0
f 0
1
<?php
2
namespace Qiniu\Storage;
3
4
use Qiniu\Config;
5
use Qiniu\Http\HttpClient;
6
use Qiniu\Storage\ResumeUploader;
7
use Qiniu\Storage\FormUploader;
8
9
/**
10
 * 主要涉及了资源上传接口的实现
11
 *
12
 * @link http://developer.qiniu.com/docs/v6/api/reference/up/
13
 */
14
final class UploadManager
15
{
16
    private $config;
17
18 12
    public function __construct(Config $config = null)
19
    {
20 12
        if ($config === null) {
21 9
            $config = new Config();
22 6
        }
23 12
        $this->config = $config;
24 12
    }
25
26
    /**
27
     * 上传二进制流到七牛
28
     *
29
     * @param $upToken    上传凭证
30
     * @param $key        上传文件名
31
     * @param $data       上传二进制流
32
     * @param $params     自定义变量,规格参考
33
     *                    http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar
34
     * @param $mime       上传数据的mimeType
35
     * @param $checkCrc   是否校验crc32
36
     *
37
     * @return array    包含已上传文件的信息,类似:
38
     *                                              [
39
     *                                                  "hash" => "<Hash string>",
40
     *                                                  "key" => "<Key string>"
41
     *                                              ]
42
     */
43 3
    public function put(
44
        $upToken,
45
        $key,
46
        $data,
47
        $params = null,
48
        $mime = 'application/octet-stream',
49
        $fname = null,
50
        $checkCrc = false
51
    ) {
52
    
53 3
        $params = self::trimParams($params);
54 3
        return FormUploader::put(
55 3
            $upToken,
56 3
            $key,
57 3
            $data,
58 3
            $this->config,
59 3
            $params,
60 3
            $mime,
61 3
            $fname,
62 1
            $checkCrc
63 2
        );
64
    }
65
66
67
    /**
68
     * 上传文件到七牛
69
     *
70
     * @param $upToken    上传凭证
71
     * @param $key        上传文件名
72
     * @param $filePath   上传文件的路径
73
     * @param $params     自定义变量,规格参考
74
     *                    http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar
75
     * @param $mime       上传数据的mimeType
76
     * @param $checkCrc   是否校验crc32
77
     *
78
     * @return array    包含已上传文件的信息,类似:
79
     *                                              [
80
     *                                                  "hash" => "<Hash string>",
81
     *                                                  "key" => "<Key string>"
82
     *                                              ]
83
     */
84 9
    public function putFile(
85
        $upToken,
86
        $key,
87
        $filePath,
88
        $params = null,
89
        $mime = 'application/octet-stream',
90
        $checkCrc = false
91
    ) {
92
    
93 9
        $file = fopen($filePath, 'rb');
94 9
        if ($file === false) {
95
            throw new \Exception("file can not open", 1);
96
        }
97 9
        $params = self::trimParams($params);
98 9
        $stat = fstat($file);
99 9
        $size = $stat['size'];
100 9
        if ($size <= Config::BLOCK_SIZE) {
101 3
            $data = fread($file, $size);
102 3
            fclose($file);
103 3
            if ($data === false) {
104
                throw new \Exception("file can not read", 1);
105
            }
106 3
            return FormUploader::put(
107 3
                $upToken,
108 3
                $key,
109 3
                $data,
110 3
                $this->config,
111 3
                $params,
112 3
                $mime,
113 3
                basename($filePath),
114 1
                $checkCrc
115 2
            );
116
        }
117
118 6
        $up = new ResumeUploader(
119 6
            $upToken,
120 6
            $key,
121 6
            $file,
122 6
            $size,
123 6
            $params,
124 6
            $mime,
125 6
            $this->config
126 4
        );
127 3
        $ret = $up->upload(basename($filePath));
128 3
        fclose($file);
129 3
        return $ret;
130
    }
131
132 12
    public static function trimParams($params)
133
    {
134 12
        if ($params === null) {
135 12
            return null;
136
        }
137
        $ret = array();
138
        foreach ($params as $k => $v) {
139
            $pos1 = strpos($k, 'x:');
140
            $pos2 = strpos($k, 'x-qn-meta-');
141
            if (($pos1 === 0 || $pos2 === 0) && !empty($v)) {
142
                $ret[$k] = $v;
143
            }
144
        }
145
        return $ret;
146
    }
147
}
148