Dear Racke, thank you for your response.
On 07/30/2013 06:27 PM, Fotis E. Psomopoulos wrote:
/ Dear all, />>/ />>/ I am quite new to Dancer but I am really amazed on how few lines of code I have to write for the same functionality (still exploring though). />>/ />>/ However, I have hit the following issue: I am trying to upload a file using the following code: />>/ />>/ put '/upload/:file' => sub { />>/ my $upload_dir = "MyApp/UPLOADS"; />>/ my $filename = params->{file}; />>/ my $uploadedFile = request->upload($filename); />>/ />>/ debug "My Log 1: " . params->{file}; />>/ debug "My Log 2: " . ref($uploadedFile); />>/ />>/ open ( UPLOADFILE, "$upload_dir/$filename" ) or die "$!"; />>/ />>/ while ( <UPLOADFILE> ) />>/ { />>/ print UPLOADFILE; />>/ } />>/ />>/ close UPLOADFILE; />>/ />>/ return "DONE"; />>/ }; />>/ />>/ The PUT command is done via cURL as follows: />>/ />>/ curl --upload-file testhttp://localhost:3000/upload/test />>/ DONE />>/ />>/ The output that I see in the "development dance floor" is the following: />>/ />>/ [9072] core @0.000341> request: PUT /upload/test from 127.0.0.1 in /Perl/site/lib/Dancer/Handler.pm l. 56 />>/ [9072] core @0.002434> [hit #1]Trying to match 'PUT /upload/test' against /^\/upload\/([^\/]+)$/ (generated from '/upload/:file') in /Perl/site/lib/Dancer/Route.pm l. 84 />>/ [9072] core @0.004173> [hit #1] --> got 1 in /Perl/site/lib/Dancer/Route.pm l. 102 />>/ [9072] core @0.006625> [hit #1] --> named tokens are: file in /Perl/site/lib/Dancer/Route.pm l. 130 />/> [9072] debug @0.009443> [hit #1]My Log 1: test in MyApp\lib/MyApp.pm l. 20 />/> [9072] debug @0.010818> [hit #1]*My Log 2: in MyApp\lib/MyApp.pm l. 21* />/> [9072] core @0.015854> [hit #1]response: 200 in /Perl/site/lib/Dancer/Handler.pm l. 179 />/> />/> The problem is that the file is created with the correct name in the correct folder (MyApp/UPLOADS/test) but it is always empty (0 size). No other warnings or errors, but I do see an issue in the output (marked in bold - 2nd custom debug line). Any ideas? />/> /> Why don't you use the functions of the upload object to store the uploaded file?
I have tried the following code: put '/upload/:file' => sub { my $upload_dir = "c:/Fotis/INA-CERTH/Microme/PathTrace/WebApp/PathTraceWS/UPLOADS"; my $filename = params->{file}; my $uploadedFile = request->upload($filename); $uploadedFile->copy_to('$upload_dir'); debug "My Log 1: " . params->{file}; debug "My Log 2: " . ref($uploadedFile); return "DONE"; }; However, the problem is probably the same as before: / //request to PUT /upload/test crashed: Can't call method "copy_to" on an undefined value/ What I really cannot understand is why the second debug line returns empty (...ref($uploadedFile)...).
Also you open the file for reading, not for writing.
Well that's embarrassing... However, I corrected it and the problem remains (for some reason, it doesn't get the file). Thank you very much for your time! Regards, Fotis