@@ -832,33 +832,54 @@ component accessors="true" singleton {
832
832
}
833
833
try {
834
834
835
- function processPart ( part ){
836
- var channel = part . channel . position ( part . offset );
837
- var buffer = createObject ( " java " , " java.nio.ByteBuffer " ). allocate ( part . limit );
838
- channel . read ( buffer );
839
-
840
- return {
841
- " partNumber " : part . partNumber ,
842
- " size " : part . limit ,
843
- " channel " : part . channel ,
844
- " response " : s3Request (
845
- method = " PUT " ,
846
- resource = bucketName & " / " & uri ,
847
- body = buffer . array (),
848
- timeout = part . timeout ,
849
- parameters = {
850
- " uploadId " : part . uploadId ,
851
- " partNumber " : part .partNumber
852
- },
853
- headers = { " content-type " : " binary/octet-stream " }
854
- )
855
- };
856
- }
857
- // Alow for using outside of `box` context
858
- if ( structKeyExists ( variables , " asyncManager " ) ){
859
- parts = variables . asyncManager . allApply ( parts , processPart );
835
+ // We have to do this manually due to the async manager losing scope when we use it as a UDF
836
+ // TODO: Move this to a function and pass in the all of the args used
837
+ if ( ! isNull ( variables . asyncManager ) ){
838
+ parts = variables . asyncManager . allApply ( parts , function ( part ){
839
+ var channel = part . channel . position ( part . offset );
840
+ var buffer = createObject ( " java " , " java.nio.ByteBuffer " ). allocate ( part . limit );
841
+ channel . read ( buffer );
842
+
843
+ return {
844
+ " partNumber " : part . partNumber ,
845
+ " size " : part . limit ,
846
+ " channel " : part . channel ,
847
+ " response " : s3Request (
848
+ method = " PUT " ,
849
+ resource = bucketName & " / " & uri ,
850
+ body = buffer . array () ,
851
+ timeout = part .timeout ,
852
+ parameters = {
853
+ " uploadId " : part . uploadId ,
854
+ " partNumber " : part . partNumber
855
+ },
856
+ headers = { " content-type " : " binary/octet-stream " }
857
+ )
858
+ };
859
+ } );
860
860
} else {
861
- parts = parts .map ( processPart );
861
+ parts = parts .map ( function ( part ){
862
+ var channel = part .channel .position ( part .offset );
863
+ var buffer = createObject ( " java" , " java.nio.ByteBuffer" ).allocate ( part .limit );
864
+ channel .read ( buffer );
865
+
866
+ return {
867
+ " partNumber" : part .partNumber ,
868
+ " size" : part .limit ,
869
+ " channel" : part .channel ,
870
+ " response" : s3Request (
871
+ method = " PUT" ,
872
+ resource = bucketName & " /" & uri ,
873
+ body = buffer .array (),
874
+ timeout = part .timeout ,
875
+ parameters = {
876
+ " uploadId" : part .uploadId ,
877
+ " partNumber" : part .partNumber
878
+ },
879
+ headers = { " content-type" : " binary/octet-stream" }
880
+ )
881
+ };
882
+ } );
862
883
}
863
884
864
885
var finalizeBody = " <?xml version="" 1.0"" encoding="" UTF-8"" ?><CompleteMultipartUpload xmlns="" http://s3.amazonaws.com/doc/2006-03-01/"" >" ;
0 commit comments