Skip to content

Commit 6669e01

Browse files
committed
x
1 parent 806f153 commit 6669e01

File tree

4 files changed

+141
-6
lines changed

4 files changed

+141
-6
lines changed

qiniu/io.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class Qiniu_PutExtra
1414
public $CheckCrc = 0;
1515
}
1616

17-
function Qiniu_Put($upToken, $key, $body, $putExtra) // => ($data, $err)
17+
function Qiniu_Put($upToken, $key, $body, $fsize, $putExtra) // => ($putRet, $err)
1818
{
1919
global $QINIU_UP_HOST;
2020

@@ -39,7 +39,7 @@ function Qiniu_Put($upToken, $key, $body, $putExtra) // => ($data, $err)
3939
return Qiniu_Client_CallWithMultipartForm($client, $QINIU_UP_HOST, $fields, $files);
4040
}
4141

42-
function Qiniu_PutFile($upToken, $key, $localFile, $putExtra) // => ($data, $err)
42+
function Qiniu_PutFile($upToken, $key, $localFile, $putExtra) // => ($putRet, $err)
4343
{
4444
global $QINIU_UP_HOST;
4545

@@ -67,3 +67,5 @@ function Qiniu_PutFile($upToken, $key, $localFile, $putExtra) // => ($data, $err
6767
return Qiniu_Client_CallWithForm($client, $QINIU_UP_HOST, $fields, 'multipart/form-data');
6868
}
6969

70+
// ----------------------------------------------------------
71+

qiniu/resumable_io.php

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
<?php
2+
3+
require_once("http.php");
4+
require_once("auth_digest.php");
5+
6+
// ----------------------------------------------------------
7+
// class Qiniu_Rio_PutExtra
8+
9+
class Qiniu_Rio_PutExtra
10+
{
11+
public $Bucket = null; // 必选(未来会没有这个字段)。
12+
public $Params = null;
13+
public $MimeType = null;
14+
public $ChunkSize = 0; // 可选。每次上传的Chunk大小
15+
public $TryTimes = 0; // 可选。尝试次数
16+
public $Progresses = null; // 可选。上传进度:[]BlkputRet
17+
public $Notify = null; // 进度通知:func(blkIdx int, blkSize int, ret *BlkputRet)
18+
public $NotifyErr = null; // 错误通知:func(blkIdx int, blkSize int, err error)
19+
}
20+
21+
// ----------------------------------------------------------
22+
// func Qiniu_Rio_BlockCount
23+
24+
define('QINIU_RIO_BLOCK_BITS', 22);
25+
define('QINIU_RIO_BLOCK_SIZE', 1 << QINIU_RIO_BLOCK_BITS); // 4M
26+
27+
function Qiniu_Rio_BlockCount($fsize) // => $blockCnt
28+
{
29+
return ($fsize + (QINIU_RIO_BLOCK_SIZE - 1)) >> QINIU_RIO_BLOCK_BITS;
30+
}
31+
32+
// ----------------------------------------------------------
33+
// internal func Qiniu_Rio_Mkblock/Mkfile
34+
35+
function Qiniu_Rio_Mkblock($self, $host, $reader, $size) // => ($blkputRet, $err)
36+
{
37+
$body = fread($reader, $size);
38+
if ($body === false) {
39+
$err = Qiniu_NewError(0, 'fread failed');
40+
return array(null, $err);
41+
}
42+
if (strlen($body) != $fsize) {
43+
$err = Qiniu_NewError(0, 'fread failed: unexpected eof');
44+
return array(null, $err);
45+
}
46+
47+
$url = $host . '/mkblk/' . $size;
48+
return Qiniu_Client_CallWithForm($self, $url, $body, 'application/octet-stream');
49+
}
50+
51+
function Qiniu_Rio_Mkfile($self, $host, $key, $fsize, $extra) // => ($putRet, $err)
52+
{
53+
$entry = $extra->Bucket . ':' . $key;
54+
$url = $host . '/rs-mkfile/' . Qiniu_Encode($entry) . '/fsize/' . $fsize;
55+
56+
if (!empty($extra->MimeType)) {
57+
$url .= '/mimeType/' . Qiniu_Encode($extra->MimeType);
58+
}
59+
60+
$ctxs = array();
61+
for ($extra->Progresses as $prog) {
62+
$ctxs []= $prog['ctx'];
63+
}
64+
$body = implode(',', $ctxs);
65+
66+
return Qiniu_Client_CallWithForm($self, $url, $body, 'text/plain');
67+
}
68+
69+
// ----------------------------------------------------------
70+
// class Qiniu_Rio_UploadClient
71+
72+
class Qiniu_Rio_UploadClient
73+
{
74+
public $uptoken;
75+
76+
public function __construct($uptoken)
77+
{
78+
$this->uptoken = $uptoken;
79+
}
80+
81+
public function RoundTrip($req) // => ($resp, $error)
82+
{
83+
$token = $this->uptoken;
84+
$req->Header['Authorization'] = "UpToken $token";
85+
return Qiniu_Client_do($req);
86+
}
87+
}
88+
89+
// ----------------------------------------------------------
90+
// class Qiniu_Rio_Put/PutFile
91+
92+
function Qiniu_Rio_Put($upToken, $key, $body, $fsize, $putExtra) // => ($putRet, $err)
93+
{
94+
global $QINIU_UP_HOST;
95+
96+
$self = new Qiniu_Rio_UploadClient($upToken);
97+
98+
$progresses = array();
99+
$host = $QINIU_UP_HOST;
100+
$uploaded = 0;
101+
while($uploaded < $fsize) {
102+
if ($uploaded + QINIU_RIO_BLOCK_SIZE < $fsize) {
103+
$bsize = $fsize - $uploaded;
104+
} else {
105+
$bsize = QINIU_RIO_BLOCK_SIZE;
106+
}
107+
list($blkputRet, $err) = Qiniu_Rio_Mkblock($self, $host, $body, $bsize);
108+
$host = $blkputRet['host'];
109+
$uploaded += $bsize;
110+
$progresses []= $blkputRet;
111+
}
112+
113+
return Qiniu_Rio_Mkfile($self, $host, $key, $fsize, $putExtra);
114+
}
115+
116+
function Qiniu_Rio_PutFile($upToken, $key, $localFile, $putExtra) // => ($putRet, $err)
117+
{
118+
119+
$fp = fopen($localFile, 'rb');
120+
if ($fp === false) {
121+
$err = Qiniu_NewError(0, 'fopen failed');
122+
return array(null, $err);
123+
}
124+
125+
$fi = fstat($fp);
126+
127+
Qiniu_Rio_Put($upToken, $key, $fp, $fi['size'], $putExtra);
128+
fclose($fp);
129+
}
130+
131+
// ----------------------------------------------------------
132+

qiniu/rs.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,8 @@ function Qiniu_RS_Copy($self, $bucketSrc, $keySrc, $bucketDest, $keyDest) // =>
170170
return Qiniu_Client_CallNoRet($self, $QINIU_RS_HOST . $uri);
171171
}
172172

173-
174173
// ----------------------------------------------------------
175-
//batch
174+
// batch
176175

177176
function Qiniu_RS_Batch($self, $ops) // => ($data, $error)
178177
{
@@ -222,3 +221,5 @@ function Qiniu_RS_BatchCopy($self, $entryPairs)
222221
return Qiniu_RS_Batch($self, $params);
223222
}
224223

224+
// ----------------------------------------------------------
225+

qiniu/rs_utils.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
require_once("rs.php");
44
require_once("io.php");
55

6-
function Qiniu_RS_Put($self, $bucket, $key, $body, $putExtra) // => ($data, $err)
6+
function Qiniu_RS_Put($self, $bucket, $key, $body, $putExtra) // => ($putRet, $err)
77
{
88
$putPolicy = new Qiniu_RS_PutPolicy("$bucket:$key");
99
$upToken = $putPolicy->Token($self->Mac);
1010
return Qiniu_Put($upToken, $key, $body, $putExtra);
1111
}
1212

13-
function Qiniu_RS_PutFile($self, $bucket, $key, $localFile, $putExtra) // => ($data, $err)
13+
function Qiniu_RS_PutFile($self, $bucket, $key, $localFile, $putExtra) // => ($putRet, $err)
1414
{
1515
$putPolicy = new Qiniu_RS_PutPolicy("$bucket:$key");
1616
$upToken = $putPolicy->Token($self->Mac);

0 commit comments

Comments
 (0)