@@ -64,7 +64,7 @@ function removeLeadingSlash(filename) {
64
64
function encodeSpecialCharacters ( filename ) {
65
65
// Note: these characters are valid in URIs, but S3 does not like them for
66
66
// some reason.
67
- return encodeURI ( filename ) . replace ( / [ ! ' ( ) # * + ] / g, function ( char ) {
67
+ return encodeURI ( filename ) . replace ( / [ ! ' ( ) # * + ? ] / g, function ( char ) {
68
68
return '%' + char . charCodeAt ( 0 ) . toString ( 16 ) ;
69
69
} ) ;
70
70
}
@@ -255,7 +255,7 @@ Client.prototype.request = function(method, filename, headers){
255
255
var options = { hostname : this . host , agent : this . agent , port : this . port }
256
256
, date = new Date
257
257
, headers = headers || { }
258
- , fixedFilename = encodeSpecialCharacters ( ensureLeadingSlash ( filename ) ) ;
258
+ , fixedFilename = ensureLeadingSlash ( filename ) ;
259
259
260
260
// Default headers
261
261
headers . Date = date . toUTCString ( )
@@ -323,7 +323,7 @@ Client.prototype.request = function(method, filename, headers){
323
323
324
324
Client . prototype . put = function ( filename , headers ) {
325
325
headers = utils . merge ( { } , headers || { } ) ;
326
- return this . request ( 'PUT' , filename , headers ) ;
326
+ return this . request ( 'PUT' , encodeSpecialCharacters ( filename ) , headers ) ;
327
327
} ;
328
328
329
329
/**
@@ -548,7 +548,7 @@ Client.prototype.copyFileTo = function(sourceFilename, destBucket, destFilename,
548
548
*/
549
549
550
550
Client . prototype . get = function ( filename , headers ) {
551
- return this . request ( 'GET' , filename , headers ) ;
551
+ return this . request ( 'GET' , encodeSpecialCharacters ( filename ) , headers ) ;
552
552
} ;
553
553
554
554
/**
@@ -583,7 +583,7 @@ Client.prototype.getFile = function(filename, headers, fn){
583
583
*/
584
584
585
585
Client . prototype . head = function ( filename , headers ) {
586
- return this . request ( 'HEAD' , filename , headers ) ;
586
+ return this . request ( 'HEAD' , encodeSpecialCharacters ( filename ) , headers ) ;
587
587
} ;
588
588
589
589
/**
@@ -618,7 +618,7 @@ Client.prototype.headFile = function(filename, headers, fn){
618
618
*/
619
619
620
620
Client . prototype . del = function ( filename , headers ) {
621
- return this . request ( 'DELETE' , filename , headers ) ;
621
+ return this . request ( 'DELETE' , encodeSpecialCharacters ( filename ) , headers ) ;
622
622
} ;
623
623
624
624
/**
@@ -781,11 +781,9 @@ Client.prototype.list = function(params, headers, fn){
781
781
params = null ;
782
782
}
783
783
784
- // Stringify the list params but don't encode them yet, since ::request
785
- // already encodes the value, leading to double-encoding issues
786
- var url = params ? '?' + decodeURIComponent ( qs . stringify ( params ) ) : '' ;
787
-
788
- return this . getFile ( url , headers , function ( err , res ) {
784
+ var url = params ? '?' + qs . stringify ( params ) : '' ;
785
+ var req = this . request ( 'GET' , url , headers ) ;
786
+ registerReqListeners ( req , function ( err , res ) {
789
787
if ( err ) return fn ( err ) ;
790
788
791
789
var xmlStr = '' ;
@@ -809,8 +807,11 @@ Client.prototype.list = function(params, headers, fn){
809
807
810
808
fn ( null , data ) ;
811
809
} ) ;
812
- } ) . on ( 'error' , fn ) ;
810
+ } ) ;
813
811
} ) ;
812
+ req . on ( 'error' , fn ) ;
813
+ req . end ( ) ;
814
+ return req ;
814
815
} ;
815
816
816
817
/**
0 commit comments