@@ -5,6 +5,7 @@ var fs = require('fs');
55var getCrc32 = require ( 'crc32' ) ;
66var url = require ( 'url' ) ;
77var mime = require ( 'mime' ) ;
8+ var Readable = require ( 'stream' ) . Readable ;
89var formstream = require ( 'formstream' ) ;
910
1011exports . UNDEFINED_KEY = '?'
@@ -13,6 +14,7 @@ exports.PutRet = PutRet;
1314exports . put = put ;
1415exports . putWithoutKey = putWithoutKey ;
1516exports . putFile = putFile ;
17+ exports . putReadable = putReadable ;
1618exports . putFileWithoutKey = putFileWithoutKey ;
1719
1820// @gist PutExtra
@@ -30,7 +32,7 @@ function PutRet(hash, key) {
3032}
3133
3234// onret: callback function instead of ret
33- function put ( uptoken , key , body , extra , onret ) {
35+ function putReadable ( uptoken , key , rs , extra , onret ) {
3436 if ( ! extra ) {
3537 extra = new PutExtra ( ) ;
3638 }
@@ -42,35 +44,43 @@ function put(uptoken, key, body, extra, onret) {
4244 key = exports . UNDEFINED_KEY ;
4345 }
4446
45- var form = getMultipart ( uptoken , key , body , extra ) ;
47+ rs . on ( "error" , function ( err ) {
48+ onret ( { code : - 1 , error : err . toString ( ) } , { } ) ;
49+ } ) ;
50+
51+ var form = getMultipart ( uptoken , key , rs , extra ) ;
4652
4753 rpc . postMultipart ( conf . UP_HOST , form , onret ) ;
4854}
4955
56+ function put ( uptoken , key , body , extra , onret ) {
57+ var rs = new Readable ( ) ;
58+ rs . push ( body ) ;
59+ rs . push ( null ) ;
60+
61+ if ( ! extra ) {
62+ extra = new PutExtra ( ) ;
63+ }
64+ if ( extra . checkCrc == 1 ) {
65+ var bodyCrc32 = getCrc32 ( body ) ;
66+ extra . crc32 = '' + parseInt ( bodyCrc32 , 16 ) ;
67+ }
68+ putReadable ( uptoken , key , rs , extra , onret )
69+ }
70+
5071function putWithoutKey ( uptoken , body , extra , onret ) {
5172 put ( uptoken , null , body , extra , onret ) ;
5273}
5374
54- function getMultipart ( uptoken , key , body , extra ) {
75+ function getMultipart ( uptoken , key , rs , extra ) {
5576
5677 var form = formstream ( ) ;
5778
5879 form . field ( 'token' , uptoken ) ;
5980 if ( key != exports . UNDEFINED_KEY ) {
6081 form . field ( 'key' , key ) ;
6182 }
62- var buf = Buffer . isBuffer ( body ) ? body : new Buffer ( body ) ;
63- form . buffer ( 'file' , buf , key , extra . mimeType ) ;
64-
65- //extra['checkcrc']
66- if ( extra . checkCrc == 1 ) {
67- var bodyCrc32 = getCrc32 ( body ) ;
68- extra . crc32 = '' + parseInt ( bodyCrc32 , 16 ) ;
69- }
70-
71- if ( extra . checkCrc ) {
72- form . field ( 'crc32' , extra . crc32 ) ;
73- }
83+ form . stream ( 'file' , rs , key , extra . mimeType ) ;
7484
7585 for ( var k in extra . params ) {
7686 form . field ( k , extra . params [ k ] ) ;
@@ -80,21 +90,21 @@ function getMultipart(uptoken, key, body, extra) {
8090}
8191
8292function putFile ( uptoken , key , loadFile , extra , onret ) {
83- fs . readFile ( loadFile , function ( err , data ) {
84- if ( err ) {
85- onret ( { code : - 1 , error : err . toString ( ) } , { } ) ;
86- return ;
87- }
8893
89- if ( ! extra ) {
90- extra = new PutExtra ( ) ;
91- }
94+ var rs = fs . createReadStream ( loadFile ) ;
9295
93- if ( ! extra . mimeType ) {
94- extra . mimeType = mime . lookup ( loadFile ) ;
95- }
96- put ( uptoken , key , data , extra , onret ) ;
97- } ) ;
96+ if ( ! extra ) {
97+ extra = new PutExtra ( ) ;
98+ }
99+ if ( extra . checkCrc == 1 ) {
100+ var fileCrc32 = getCrc32 ( fs . readFileSync ( loadFile ) ) ;
101+ extra . crc32 = '' + parseInt ( fileCrc32 , 16 ) ;
102+ }
103+ if ( ! extra . mimeType ) {
104+ extra . mimeType = mime . lookup ( loadFile ) ;
105+ }
106+
107+ putReadable ( uptoken , key , rs , extra , onret ) ;
98108}
99109
100110function putFileWithoutKey ( uptoken , loadFile , extra , onret ) {
0 commit comments