@@ -147,6 +147,63 @@ function upload(filePath, bucket, dstpath, bizattr, insertOnly, callback) {
147
147
}
148
148
}
149
149
150
+ function put ( fileBuffer , bucket , dstpath , bizattr , insertOnly , callback ) {
151
+ if ( typeof bizattr === 'function' ) {
152
+ callback = bizattr ;
153
+ bizattr = null ;
154
+ } else if ( typeof insertOnly === 'function' ) {
155
+ callback = insertOnly ;
156
+ insertOnly = undefined ;
157
+ } else {
158
+ callback = callback || function ( ret ) { console . log ( ret ) ; } ;
159
+ }
160
+
161
+ if ( typeof callback === 'function' && fileBuffer instanceof Buffer ) {
162
+
163
+ bucket = bucket . strip ( ) ;
164
+ dstpath = fixPath ( dstpath ) ;
165
+ var expired = parseInt ( Date . now ( ) / 1000 ) + conf . EXPIRED_SECONDS ;
166
+ var sign = auth . signMore ( bucket , expired ) ;
167
+ var url = generateResUrl ( bucket , dstpath ) ;
168
+ var urlInfo = urlM . parse ( url ) ;
169
+
170
+ var sha = crypto . createHash ( 'sha1' ) ;
171
+ sha . update ( fileBuffer ) ;
172
+
173
+ var form = formstream ( )
174
+ . field ( 'op' , 'upload' )
175
+ . field ( 'sha' , sha . digest ( 'hex' ) ) ;
176
+
177
+ // TODO: formsteam.buffer 可以编辑 buffer
178
+ form . buffer ( 'filecontent' , fileBuffer , dstpath ) ;
179
+
180
+ if ( bizattr ) {
181
+ form . field ( 'biz_attr' , bizattr . toString ( ) ) ;
182
+ }
183
+ if ( insertOnly !== undefined ) {
184
+ form . field ( 'insertOnly' , insertOnly ) ;
185
+ }
186
+
187
+ var headers = form . headers ( ) ;
188
+ headers [ 'Authorization' ] = sign ;
189
+ headers [ 'User-Agent' ] = conf . USER_AGENT ( ) ;
190
+ var options = {
191
+ protocol : urlInfo . protocol ,
192
+ hostname : urlInfo . hostname ,
193
+ port : urlInfo . port ,
194
+ path : urlInfo . path ,
195
+ method : 'POST' ,
196
+ headers : headers
197
+ } ;
198
+
199
+ var req = buildRequest ( options , callback ) ;
200
+ req && form . pipe ( req ) ;
201
+ } else {
202
+ // error, file not exists
203
+ callback ( { 'code' :COS_PARAMS_ERROR , 'message' :'file ' + filePath + ' not exists or params error' , 'data' :{ } } ) ;
204
+ }
205
+ }
206
+
150
207
/**
151
208
* 分片上传获取size
152
209
* @param {int } size 文件分片大小,Bytes
@@ -915,3 +972,4 @@ exports.list = list;
915
972
exports . prefixSearch = prefixSearch ;
916
973
exports . createFolder = createFolder ;
917
974
exports . moveFile = moveFile ;
975
+ exports . put = put ;
0 commit comments