Как загрузить файл в Mojolicious, как CGI Perl?

Лучшим решением вашей проблемы было бы использовать Route, который позволяет указать маршрут по методу путем аннотации:

[RoutePrefix("api/VTRouting")]
public class VTRoutingController : ApiController
{
    [HttpPost]
    [Route("Route")]
    public MyResult Route(MyRequestTemplate routingRequestTemplate)
    {
        return null;
    }

    [HttpPost]
    [Route("TSPRoute")]
    public MyResult TSPRoute(MyRequestTemplate routingRequestTemplate)
    {
        return null;
    }
}
0
задан Hoang Tran 21 February 2019 в 03:21
поделиться

1 ответ

Ознакомьтесь с Mojo :: Upload документами. Mojo :: Upload не является файловым дескриптором; Чтобы прочитать содержимое загруженного файла, проще всего использовать метод slurp, или, если вы действительно хотите прочитать его построчно, вы можете преобразовать его в ресурс File и извлечь из него дескриптор. [116 ]

use Mojo::Base 'Mojolicious::Controller';

sub action {
  my $self = shift;
  my $upfile = $self->req->upload('file');
  my $contents = $upfile->slurp;
  my $originhead = (split /^/, $contents)[0];

  # or
  my $file = $upfile->asset->to_file;
  my $handle = $file->handle;
  my ($originhead, $first_count);
  while (my $line = <$handle>) {
    $originhead = $line unless $first_count;
    $first_count++;
  }
}

Чтобы разобрать CSV, Text :: CSV обычно намного проще, чем альтернативы.

use Text::CSV 'csv';
my $array_of_hashes = csv(in => \$contents, headers => 'auto', encoding => 'UTF-8') or die Text::CSV->error_diag;

Или для построчной обработки:

my $csv = Text::CSV->new({binary => 1, auto_diag => 2});
binmode $handle, ':encoding(UTF-8)' or die "binmode failed: $!";
$csv->header($handle);
while (my $row = $csv->getline_hr($handle)) {
  ...
}
0
ответ дан Grinnz 21 February 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: