Skip to content

Commit 4131b25

Browse files
committed
Merge pull request #7 from xushiwei/feature/v6
todo: rsf, rs.batch, resumable.io.put
2 parents a4eb86f + bf2f457 commit 4131b25

File tree

8 files changed

+117
-255
lines changed

8 files changed

+117
-255
lines changed

qiniu/http.php

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ function Qiniu_Client_do($req) // => ($resp, $error)
129129
$body = $req->Body;
130130
if (!empty($body)) {
131131
$options[CURLOPT_POSTFIELDS] = $body;
132-
//$options[CURLOPT_POSTFIELDSIZE] = strlen($body);
133132
}
134133
curl_setopt_array($ch, $options);
135134
$result = curl_exec($ch);
@@ -147,7 +146,15 @@ function Qiniu_Client_do($req) // => ($resp, $error)
147146
return array($resp, null);
148147
}
149148

150-
class Qiniu_Client
149+
class Qiniu_HttpClient
150+
{
151+
public function RoundTrip($req) // => ($resp, $error)
152+
{
153+
return Qiniu_Client_do($req);
154+
}
155+
}
156+
157+
class Qiniu_MacHttpClient
151158
{
152159
private $mac;
153160

@@ -156,7 +163,7 @@ public function __construct($mac)
156163
$this->mac = Qiniu_RequireMac($mac);
157164
}
158165

159-
public function Exec($req) // => ($resp, $error)
166+
public function RoundTrip($req) // => ($resp, $error)
160167
{
161168
$incbody = Qiniu_Client_incBody($req);
162169
$token = $this->mac->SignRequest($req, $incbody);
@@ -190,7 +197,7 @@ function Qiniu_Client_Call($self, $url) // => ($data, $error)
190197
{
191198
$u = array('path' => $url);
192199
$req = new Qiniu_Request($u, null);
193-
list($resp, $err) = $self->Exec($req);
200+
list($resp, $err) = $self->RoundTrip($req);
194201
if ($err !== null) {
195202
return array(null, $err);
196203
}
@@ -201,7 +208,7 @@ function Qiniu_Client_CallNoRet($self, $url) // => $error
201208
{
202209
$u = array('path' => $url);
203210
$req = new Qiniu_Request($u, null);
204-
list($resp, $err) = $self->Exec($req);
211+
list($resp, $err) = $self->RoundTrip($req);
205212
if ($err !== null) {
206213
return array(null, $err);
207214
}
@@ -211,41 +218,39 @@ function Qiniu_Client_CallNoRet($self, $url) // => $error
211218
return Qiniu_ResponseError($resp);
212219
}
213220

214-
function Qiniu_Client_CallWithForm($self, $url, $params, $contentType = 'application/x-www-form-urlencoded') // => ($data, $error)
221+
function Qiniu_Client_CallWithForm(
222+
$self, $url, $params, $contentType = 'application/x-www-form-urlencoded') // => ($data, $error)
215223
{
216224
$u = array('path' => $url);
217-
if ($contentType === 'application/x-www-form-urlencoded' && is_array($params)) {
218-
$params = http_build_query($params);
225+
if ($contentType === 'application/x-www-form-urlencoded') {
226+
if (is_array($params)) {
227+
$params = http_build_query($params);
228+
}
219229
}
220230
$req = new Qiniu_Request($u, $params);
221-
$req->Header['Content-Type'] = $contentType;
222-
list($resp, $err) = $self->Exec($req);
231+
if ($contentType !== 'multipart/form-data') {
232+
$req->Header['Content-Type'] = $contentType;
233+
}
234+
list($resp, $err) = $self->RoundTrip($req);
223235
if ($err !== null) {
224236
return array(null, $err);
225237
}
226238
return Qiniu_Client_ret($resp);
227239
}
228240

229-
function Qiniu_Client_CallWithMultiPart($self, $url, $fields, $files)
241+
// --------------------------------------------------------------------------------
242+
243+
function Qiniu_Client_CallWithMultipartForm($self, $url, $fields, $files)
230244
{
231-
list($contentType, $body) = Qiniu_Encode_MultiPart_Form($fields, $files);
245+
list($contentType, $body) = Qiniu_Build_MultipartForm($fields, $files);
232246
return Qiniu_Client_CallWithForm($self, $url, $body, $contentType);
233247
}
234248

235-
// --------------------------------------------------------------------------------
236-
237-
function Qiniu_Encode_MultiPart_Form($fields, $files) // => ($contentType, $body)
249+
function Qiniu_Build_MultipartForm($fields, $files) // => ($contentType, $body)
238250
{
239-
$eol = "\r\n";
240251
$data = array();
241-
if ($fields == '') {
242-
$fields = array();
243-
}
244-
if ($files == '') {
245-
$files = array();
246-
}
252+
$mimeBoundary = md5(microtime());
247253

248-
$mimeBoundary = md5(time());
249254
foreach ($fields as $name => $val){
250255
array_push($data, '--' . $mimeBoundary);
251256
array_push($data, "Content-Disposition: form-data; name=$name");
@@ -265,8 +270,10 @@ function Qiniu_Encode_MultiPart_Form($fields, $files) // => ($contentType, $body
265270
array_push($data, '--' . $mimeBoundary);
266271
array_push($data, '');
267272

268-
$body = implode($eol, $data);
273+
$body = implode("\r\n", $data);
269274
$contentType = 'multipart/form-data; boundary=' . $mimeBoundary;
270275
return array($contentType, $body);
271276
}
272277

278+
// --------------------------------------------------------------------------------
279+

qiniu/io.php

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,56 +3,68 @@
33
require_once("http.php");
44
require_once("auth_digest.php");
55

6-
7-
define('UNDEFINED_KEY', "?");
8-
define('NO_CRC32', 0);
9-
define('AUTO_CRC32', 1);
10-
define('WITH_CRC32', 2);
11-
126
// ----------------------------------------------------------
137
// class Qiniu_PutExtra
148

159
class Qiniu_PutExtra
1610
{
17-
public $Params;
18-
public $MimeType;
19-
public $Crc32;
20-
public $CheckCrc;
11+
public $Params = null;
12+
public $MimeType = null;
13+
public $Crc32 = 0;
14+
public $CheckCrc = 0;
2115
}
2216

2317
function Qiniu_Put($upToken, $key, $body, $putExtra) // => ($data, $err)
2418
{
2519
global $QINIU_UP_HOST;
26-
if ($key == null) {
27-
$key = UNDEFINED_KEY;
20+
21+
if ($putExtra === null) {
22+
$putExtra = new Qiniu_PutExtra;
2823
}
29-
$fields = array('key' => $key, 'token' => $upToken);
3024

31-
if ( $putExtra->CheckCrc == AUTO_CRC32 || $putExtra->CheckCrc == WITH_CRC32 ) {
25+
$fields = array('token' => $upToken);
26+
if ($key === null) {
27+
$fname = '?';
28+
} else {
29+
$fname = $key;
30+
$fields['key'] = $key;
31+
}
32+
if ($putExtra->CheckCrc) {
3233
$fields['crc32'] = $putExtra->Crc32;
3334
}
34-
$files = array(array('file', $key, $body));
3535

36-
$client = new Qiniu_Client(null);
37-
return Qiniu_Client_CallWithMultiPart($client, $QINIU_UP_HOST, $fields, $files);
36+
$files = array(array('file', $fname, $body));
37+
38+
$client = new Qiniu_HttpClient;
39+
return Qiniu_Client_CallWithMultipartForm($client, $QINIU_UP_HOST, $fields, $files);
3840
}
3941

4042
function Qiniu_PutFile($upToken, $key, $localFile, $putExtra) // => ($data, $err)
4143
{
4244
global $QINIU_UP_HOST;
43-
if ($key == null) {
44-
$key = UNDEFINED_KEY;
45+
46+
if ($putExtra === null) {
47+
$putExtra = new Qiniu_PutExtra;
4548
}
46-
$fields = array('key' => $key, 'token' => $upToken, 'file' => '@' . $localFile);
4749

48-
if ( $putExtra->CheckCrc == AUTO_CRC32 ) {
49-
$hash = hash_file('crc32b', $localFile);
50-
$crc32 = unpack('N', pack('H*', $hash));
51-
$fields['crc32'] = $crc32[1];
52-
} elseif ($putExtra->CheckCrc == WITH_CRC32 ) {
53-
$fields['crc32'] = $putExtra->Crc32;
50+
$fields = array('token' => $upToken, 'file' => '@' . $localFile);
51+
if ($key === null) {
52+
$fname = '?';
53+
} else {
54+
$fname = $key;
55+
$fields['key'] = $key;
56+
}
57+
if ($putExtra->CheckCrc) {
58+
if ($putExtra->CheckCrc === 1) {
59+
$hash = hash_file('crc32b', $localFile);
60+
$crc32 = unpack('N', pack('H*', $hash));
61+
$fields['crc32'] = $crc32[1];
62+
} else {
63+
$fields['crc32'] = $putExtra->Crc32;
64+
}
5465
}
5566

56-
$client = new Qiniu_Client(null);
67+
$client = new Qiniu_HttpClient;
5768
return Qiniu_Client_CallWithForm($client, $QINIU_UP_HOST, $fields, 'multipart/form-data');
5869
}
70+

qiniu/rs.php

Lines changed: 25 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ class Qiniu_RS_EntryPath
9595
{
9696
public $bucket;
9797
public $key;
98+
9899
public function __construct($bucket, $key)
99100
{
100101
$this->bucket = $bucket;
@@ -109,6 +110,7 @@ class Qiniu_RS_EntryPathPair
109110
{
110111
public $src;
111112
public $dest;
113+
112114
public function __construct($src, $dest)
113115
{
114116
$this->src = $src;
@@ -118,112 +120,55 @@ public function __construct($src, $dest)
118120

119121
// ----------------------------------------------------------
120122

121-
function Qiniu_RS_Stat($self, $bucket, $key) // => ($statRet, $error)
123+
function Qiniu_RS_URIStat($bucket, $key)
122124
{
123-
global $QINIU_RS_HOST;
124-
return Qiniu_Client_Call($self, $QINIU_RS_HOST . Qiniu_RS_URIStat($bucket, $key));
125+
return '/stat/' . Qiniu_Encode("$bucket:$key");
125126
}
126127

127-
function Qiniu_RS_Delete($self, $bucket, $key) // => $error
128+
function Qiniu_RS_URIDelete($bucket, $key)
128129
{
129-
global $QINIU_RS_HOST;
130-
return Qiniu_Client_CallNoRet($self, $QINIU_RS_HOST . Qiniu_RS_URIDelete($bucket, $key));
130+
return '/delete/' . Qiniu_Encode("$bucket:$key");
131131
}
132132

133-
134-
function Qiniu_RS_Move($self, $bucketSrc, $keySrc, $bucketDest, $keyDest) // => $error
133+
function Qiniu_RS_URICopy($bucketSrc, $keySrc, $bucketDest, $keyDest)
135134
{
136-
global $QINIU_RS_HOST;
137-
return Qiniu_Client_CallNoRet($self, "$QINIU_RS_HOST".Qiniu_RS_URIMove($bucketSrc, $keySrc, $bucketDest, $keyDest));
135+
return '/copy/' . Qiniu_Encode("$bucketSrc:$keySrc") . '/' . Qiniu_Encode("$bucketDest:$keyDest");
138136
}
139137

140-
function Qiniu_RS_Copy($self, $bucketSrc, $keySrc, $bucketDest, $keyDest) // => $error
138+
function Qiniu_RS_URIMove($bucketSrc, $keySrc, $bucketDest, $keyDest)
141139
{
142-
global $QINIU_RS_HOST;
143-
return Qiniu_Client_CallNoRet($self, "$QINIU_RS_HOST".Qiniu_RS_URICopy($bucketSrc, $keySrc, $bucketDest, $keyDest));
140+
return '/move/' . Qiniu_Encode("$bucketSrc:$keySrc") . '/' . Qiniu_Encode("$bucketDest:$keyDest");
144141
}
145142

146-
147143
// ----------------------------------------------------------
148-
//batch
149144

150-
function Qiniu_RS_Batch($self, $url) // => ($data, $error)
145+
function Qiniu_RS_Stat($self, $bucket, $key) // => ($statRet, $error)
151146
{
152147
global $QINIU_RS_HOST;
153-
return Qiniu_Client_CallWithForm($self, $QINIU_RS_HOST . "/batch?", $url);
154-
}
155-
156-
function Qiniu_RS_BatchStat($self, $entryPaths)
157-
{
158-
$params = '';
159-
foreach ($entryPaths as $entryPath) {
160-
if ($params === '') {
161-
$params = 'op=' . Qiniu_RS_URIStat($entryPath->bucket, $entryPath->key);
162-
continue;
163-
}
164-
$params .= '&op=' . Qiniu_RS_URIStat($entryPath->bucket, $entryPath->key);
165-
}
166-
return Qiniu_RS_Batch($self,$params);
148+
$uri = Qiniu_RS_URIStat($bucket, $key);
149+
return Qiniu_Client_Call($self, $QINIU_RS_HOST . $uri);
167150
}
168151

169-
function Qiniu_RS_BatchDelete($self, $entryPaths)
152+
function Qiniu_RS_Delete($self, $bucket, $key) // => $error
170153
{
171-
$params = '';
172-
foreach ($entryPaths as $entryPath) {
173-
if ($params == '') {
174-
$params = 'op=' . Qiniu_RS_URIDelete($entryPath->bucket, $entryPath->key);
175-
continue;
176-
}
177-
$params .= '&op=' . Qiniu_RS_URIDelete($entryPath->bucket, $entryPath->key);
178-
}
179-
return Qiniu_RS_Batch($self, $params);
154+
global $QINIU_RS_HOST;
155+
$uri = Qiniu_RS_URIDelete($bucket, $key);
156+
return Qiniu_Client_CallNoRet($self, $QINIU_RS_HOST . $uri);
180157
}
181158

182-
function Qiniu_RS_BatchMove($self, $entryPairs)
159+
function Qiniu_RS_Move($self, $bucketSrc, $keySrc, $bucketDest, $keyDest) // => $error
183160
{
184-
$params = '';
185-
foreach ($entryPairs as $entryPair) {
186-
if ($params == '') {
187-
$params = 'op=' . Qiniu_RS_URIMove($entryPair->src->bucket, $entryPair->src->key, $entryPair->dest->bucket, $entryPair->dest->key);
188-
continue;
189-
}
190-
$params .= '&op=' . Qiniu_RS_URIMove($entryPair->src->bucket, $entryPair->src->key, $entryPair->dest->bucket, $entryPair->dest->key);
191-
}
192-
return Qiniu_RS_Batch($self, $params);
161+
global $QINIU_RS_HOST;
162+
$uri = Qiniu_RS_URIMove($bucketSrc, $keySrc, $bucketDest, $keyDest);
163+
return Qiniu_Client_CallNoRet($self, $QINIU_RS_HOST . $uri);
193164
}
194165

195-
function Qiniu_RS_BatchCopy($self, $entryPairs)
166+
function Qiniu_RS_Copy($self, $bucketSrc, $keySrc, $bucketDest, $keyDest) // => $error
196167
{
197-
$params = '';
198-
foreach ($entryPairs as $entryPair) {
199-
if ($params == '') {
200-
$params = 'op=' . Qiniu_RS_URICopy($entryPair->src->bucket, $entryPair->src->key, $entryPair->dest->bucket, $entryPair->dest->key);
201-
continue;
202-
}
203-
$params .= '&op=' . Qiniu_RS_URICopy($entryPair->src->bucket, $entryPair->src->key, $entryPair->dest->bucket, $entryPair->dest->key);
204-
}
205-
return Qiniu_RS_Batch($self, $params);
168+
global $QINIU_RS_HOST;
169+
$uri = Qiniu_RS_URICopy($bucketSrc, $keySrc, $bucketDest, $keyDest);
170+
return Qiniu_Client_CallNoRet($self, $QINIU_RS_HOST . $uri);
206171
}
207172

208-
209173
// ----------------------------------------------------------
210174

211-
function Qiniu_RS_URIStat($bucket, $key) // => $entryURIEncoded
212-
{
213-
return "/stat/" . Qiniu_Encode("$bucket:$key");
214-
}
215-
216-
function Qiniu_RS_URIDelete($bucket, $key)
217-
{
218-
return "/delete/" . Qiniu_Encode("$bucket:$key");
219-
}
220-
221-
function Qiniu_RS_URICopy($bucketSrc, $keySrc, $bucketDest, $keyDest)
222-
{
223-
return "/copy/" . Qiniu_Encode("$bucketSrc:$keySrc") . "/" . Qiniu_Encode("$bucketDest:$keyDest");
224-
}
225-
226-
function Qiniu_RS_URIMove($bucketSrc, $keySrc, $bucketDest, $keyDest)
227-
{
228-
return "/move/" . Qiniu_Encode("$bucketSrc:$keySrc") . "/" . Qiniu_Encode("$bucketDest:$keyDest");
229-
}

0 commit comments

Comments
 (0)