Completed
Push — master ( 79290f...5ae020 )
by
unknown
12s
created

FormUploader::put()   B

Complexity

Conditions 6
Paths 12

Size

Total Lines 41
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 11.1736

Importance

Changes 0
Metric Value
cc 6
eloc 27
nc 12
nop 8
dl 0
loc 41
ccs 10
cts 21
cp 0.4762
crap 11.1736
rs 8.439
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
namespace Qiniu\Storage;
3
4
use Qiniu\Http\Client;
5
use Qiniu\Http\Error;
6
7
final class FormUploader
8
{
9
10
    /**
11
     * 上传二进制流到七牛, 内部使用
12
     *
13
     * @param $upToken    上传凭证
14
     * @param $key        上传文件名
15
     * @param $data       上传二进制流
16
     * @param $config     上传配置
17
     * @param $params     自定义变量,规格参考
18
     *                    http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar
19
     * @param $mime       上传数据的mimeType
20
     *
21
     * @return array    包含已上传文件的信息,类似:
22
     *                                              [
23
     *                                                  "hash" => "<Hash string>",
24
     *                                                  "key" => "<Key string>"
25
     *                                              ]
26
     */
27 6
    public static function put(
28
        $upToken,
29
        $key,
30
        $data,
31
        $config,
32
        $params,
33
        $mime,
34
        $checkCrc,
0 ignored issues
show
Unused Code introduced by
The parameter $checkCrc is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
35
        $filePath
36
    ) {
37
38 3
        $fields = array('token' => $upToken);
39 3
        if ($key === null) {
40
            $fname = $filePath;
41
        } else {
42 6
            $fname = $filePath;
43 3
            $fields['key'] = $key;
44
        }
45
46
        //enable crc32 check by default
47 3
        $fields['crc32'] = \Qiniu\crc32_data($data);
48
49 3
        if ($params) {
50
            foreach ($params as $k => $v) {
51
                $fields[$k] = $v;
52
            }
53
        }
54
55 3
        list($accessKey, $bucket, $err) = \Qiniu\explodeUpToken($upToken);
56 3
        if ($err != null) {
57
            return array(null, $err);
58
        }
59
60 3
        $upHost = $config->getUpHost($accessKey, $bucket);
61
62
        $response = Client::multipartPost($upHost, $fields, 'file', $fname, $data, $mime);
63
        if (!$response->ok()) {
64
            return array(null, new Error($upHost, $response));
65
        }
66
        return array($response->json(), null);
67
    }
68
69
    /**
70
     * 上传文件到七牛,内部使用
71
     *
72
     * @param $upToken    上传凭证
73
     * @param $key        上传文件名
74
     * @param $filePath   上传文件的路径
75
     * @param $config     上传配置
76
     * @param $params     自定义变量,规格参考
77
     *                    http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar
78
     * @param $mime       上传数据的mimeType
79
     *
80
     * @return array    包含已上传文件的信息,类似:
81
     *                                              [
82
     *                                                  "hash" => "<Hash string>",
83
     *                                                  "key" => "<Key string>"
84
     *                                              ]
85
     */
86 3
    public static function putFile(
87
        $upToken,
88
        $key,
89
        $filePath,
90
        $config,
91
        $params,
92
        $mime
93
    ) {
94
95
96 3
        $fields = array('token' => $upToken, 'file' => self::createFile($filePath, $mime));
97 3
        if ($key !== null) {
98 3
            $fields['key'] = $key;
99 3
        }
100
101 3
        $fields['crc32'] = \Qiniu\crc32_file($filePath);
102
103 3
        if ($params) {
104
            foreach ($params as $k => $v) {
105
                $fields[$k] = $v;
106
            }
107
        }
108 3
        $fields['key'] = $key;
109 3
        $headers = array('Content-Type' => 'multipart/form-data');
110
111 3
        list($accessKey, $bucket, $err) = \Qiniu\explodeUpToken($upToken);
112 3
        if ($err != null) {
113
            return array(null, $err);
114
        }
115
116 3
        $upHost = $config->getUpHost($accessKey, $bucket);
117
118
        $response = Client::post($upHost, $fields, $headers);
119
        if (!$response->ok()) {
120
            return array(null, new Error($upHost, $response));
121
        }
122
        return array($response->json(), null);
123
    }
124
125 3
    private static function createFile($filename, $mime)
126
    {
127
        // PHP 5.5 introduced a CurlFile object that deprecates the old @filename syntax
128
        // See: https://wiki.php.net/rfc/curl-file-upload
129 3
        if (function_exists('curl_file_create')) {
130 2
            return curl_file_create($filename, $mime);
131
        }
132
133
        // Use the old style if using an older version of PHP
134 1
        $value = "@{$filename}";
135 1
        if (!empty($mime)) {
136 1
            $value .= ';type=' . $mime;
137 1
        }
138
139 1
        return $value;
140
    }
141
}
142