@@ -9,6 +9,7 @@ let ObjectIO = require('../api/object_io');
99let s3_errors = require ( './s3_errors' ) ;
1010let xml2js = require ( 'xml2js' ) ;
1111let P = require ( '../util/promise' ) ;
12+ let string_utils = require ( '../util/string_utils' ) ;
1213
1314dbg . set_level ( 5 ) ;
1415
@@ -137,7 +138,7 @@ class S3Controller {
137138 } ,
138139 if_not_empty ( _ . map ( reply . objects , obj => ( {
139140 Contents : {
140- Key : obj . key ,
141+ Key : string_utils . encodeXML ( obj . key ) ,
141142 LastModified : to_s3_date ( obj . info . create_time ) ,
142143 ETag : obj . info . etag ,
143144 Size : obj . info . size ,
@@ -189,7 +190,7 @@ class S3Controller {
189190 } ,
190191 if_not_empty ( _ . map ( reply . objects , obj => ( {
191192 Version : {
192- Key : obj . key ,
193+ Key : string_utils . encodeXML ( obj . key ) ,
193194 VersionId : '' ,
194195 IsLatest : true ,
195196 LastModified : to_s3_date ( obj . info . create_time ) ,
@@ -240,7 +241,7 @@ class S3Controller {
240241 } ,
241242 if_not_empty ( _ . map ( reply . objects , obj => ( {
242243 Upload : {
243- Key : obj . key ,
244+ Key : string_utils . encodeXML ( obj . key ) ,
244245 UploadId : obj . info . version_id ,
245246 Initiated : to_s3_date ( obj . info . create_time ) ,
246247 Initiator : DEFAULT_S3_USER ,
@@ -456,13 +457,14 @@ class S3Controller {
456457 * (aka copy object)
457458 */
458459 _copy_object ( req , res ) {
459- let copy_source = req . headers [ 'x-amz-copy-source' ] ;
460+ let copy_source = decodeURIComponent ( req . headers [ 'x-amz-copy-source' ] ) ;
460461 let slash_index = copy_source . indexOf ( '/' ) ;
461462 let start_index = 0 ;
462463 if ( slash_index === 0 ) {
463464 start_index = 1 ;
464465 slash_index = copy_source . indexOf ( '/' , 1 ) ;
465466 }
467+ console . log ( 'COPY OBJECT ' , req . params . key ) ;
466468 let source_bucket = copy_source . slice ( start_index , slash_index ) ;
467469 let source_key = copy_source . slice ( slash_index + 1 ) ;
468470 let params = {
0 commit comments