@@ -783,6 +783,58 @@ function abortUploadTaskArray(params, callback) {
783783 } ) ;
784784}
785785
786+ // 高级上传
787+ function uploadFile ( params , callback ) {
788+ var self = this ;
789+
790+ // 判断多大的文件使用分片上传
791+ var SliceSize = params . SliceSize === undefined ? self . options . SliceSize : params . SliceSize ;
792+
793+ // 开始处理每个文件
794+ var taskList = [ ] ;
795+
796+ fs . stat ( params . FilePath , function ( err , stat ) {
797+
798+ var isDir = stat . isDirectory ( ) ;
799+ var FileSize = params . ContentLength = stat . size || 0 ;
800+ var fileInfo = { TaskId : '' } ;
801+
802+ // 整理 option,用于返回给回调
803+ util . each ( params , function ( v , k ) {
804+ if ( typeof v !== 'object' && typeof v !== 'function' ) {
805+ fileInfo [ k ] = v ;
806+ }
807+ } ) ;
808+
809+ // 处理文件 TaskReady
810+ var _onTaskReady = params . onTaskReady ;
811+ var onTaskReady = function ( tid ) {
812+ fileInfo . TaskId = tid ;
813+ _onTaskReady && _onTaskReady ( tid ) ;
814+ } ;
815+ params . onTaskReady = onTaskReady ;
816+
817+ // 处理文件完成
818+ var _onFileFinish = params . onFileFinish ;
819+ var onFileFinish = function ( err , data ) {
820+ _onFileFinish && _onFileFinish ( err , data , fileInfo ) ;
821+ callback && callback ( err , data ) ;
822+ } ;
823+
824+ // 添加上传任务
825+ var api = FileSize <= SliceSize || isDir ? 'putObject' : 'sliceUploadFile' ;
826+ if ( api === 'putObject' ) {
827+ params . Body = isDir ? '' : fs . createReadStream ( params . FilePath ) ;
828+ params . Body . isSdkCreated = true ;
829+ }
830+ taskList . push ( {
831+ api : api ,
832+ params : params ,
833+ callback : onFileFinish ,
834+ } ) ;
835+ self . _addTasks ( taskList ) ;
836+ } ) ;
837+ }
786838
787839// 批量上传文件
788840function uploadFiles ( params , callback ) {
@@ -1352,6 +1404,7 @@ function downloadFile(params, callback) {
13521404var API_MAP = {
13531405 sliceUploadFile : sliceUploadFile ,
13541406 abortUploadTask : abortUploadTask ,
1407+ uploadFile : uploadFile ,
13551408 uploadFiles : uploadFiles ,
13561409 sliceCopyFile : sliceCopyFile ,
13571410 downloadFile : downloadFile ,
0 commit comments