@@ -12,7 +12,7 @@ class Qiniu_Rio_PutExtra
1212 public $ Params = null ;
1313 public $ MimeType = null ;
1414 public $ ChunkSize = 0 ; // 可选。每次上传的Chunk大小
15- public $ TryTimes = 0 ; // 可选。尝试次数
15+ public $ TryTimes = 3 ; // 可选。尝试次数
1616 public $ Progresses = null ; // 可选。上传进度:[]BlkputRet
1717 public $ Notify = null ; // 进度通知:func(blkIdx int, blkSize int, ret *BlkputRet)
1818 public $ NotifyErr = null ; // 错误通知:func(blkIdx int, blkSize int, err error)
@@ -41,7 +41,7 @@ function Qiniu_Rio_Mkblock($self, $host, $reader, $size) // => ($blkputRet, $err
4141 if (is_resource ($ reader )) {
4242 $ body = fread ($ reader , $ size );
4343 if ($ body === false ) {
44- $ err = Qiniu_NewError (0 , 'fread failed ' );
44+ $ err = new Qiniu_Error (0 , 'fread failed ' );
4545 return array (null , $ err );
4646 }
4747 } else {
@@ -51,7 +51,7 @@ function Qiniu_Rio_Mkblock($self, $host, $reader, $size) // => ($blkputRet, $err
5151 }
5252 }
5353 if (strlen ($ body ) != $ size ) {
54- $ err = Qiniu_NewError (0 , 'fread failed: unexpected eof ' );
54+ $ err = new Qiniu_Error (0 , 'fread failed: unexpected eof ' );
5555 return array (null , $ err );
5656 }
5757
@@ -117,13 +117,30 @@ function Qiniu_Rio_Put($upToken, $key, $body, $fsize, $putExtra) // => ($putRet,
117117 $ progresses = array ();
118118 $ uploaded = 0 ;
119119 while ($ uploaded < $ fsize ) {
120+ $ tried = 0 ;
121+ $ tryTimes = ($ putExtra ->TryTimes > 0 ) ? $ putExtra ->TryTimes : 1 ;
122+ $ blkputRet = null ;
123+ $ err = null ;
120124 if ($ fsize < $ uploaded + QINIU_RIO_BLOCK_SIZE ) {
121125 $ bsize = $ fsize - $ uploaded ;
122126 } else {
123127 $ bsize = QINIU_RIO_BLOCK_SIZE ;
124128 }
125- list ($ blkputRet , $ err ) = Qiniu_Rio_Mkblock ($ self , $ QINIU_UP_HOST , $ body , $ bsize );
126- $ host = $ blkputRet ['host ' ];
129+ while ($ tried < $ tryTimes ) {
130+ list ($ blkputRet , $ err ) = Qiniu_Rio_Mkblock ($ self , $ QINIU_UP_HOST , $ body , $ bsize );
131+ if ($ err === null ) {
132+ break ;
133+ }
134+ $ tried += 1 ;
135+ continue ;
136+ }
137+ if ($ err !== null ) {
138+ return array (null , $ err );
139+ }
140+ if ($ blkputRet === null ) {
141+ $ err = new Qiniu_Error (0 , "rio: uploaded without ret " );
142+ return array (null , $ err );
143+ }
127144 $ uploaded += $ bsize ;
128145 $ progresses []= $ blkputRet ;
129146 }
@@ -136,7 +153,7 @@ function Qiniu_Rio_PutFile($upToken, $key, $localFile, $putExtra) // => ($putRet
136153{
137154 $ fp = fopen ($ localFile , 'rb ' );
138155 if ($ fp === false ) {
139- $ err = Qiniu_NewError (0 , 'fopen failed ' );
156+ $ err = new Qiniu_Error (0 , 'fopen failed ' );
140157 return array (null , $ err );
141158 }
142159
0 commit comments