[Moscow.pm] Mojolicious render xls

Artem Zhuravlev zhuravlev.ua на gmail.com
Чт Мар 20 03:27:52 PDT 2014


Большое спасибо.


20 марта 2014 г., 14:09 пользователь Alexander Lourier <aml на rulezz.ru>написал:

> Тогда - только архив. HTTP не поддерживает multipart-ответы.
> Можно ещё показать HTML-страничку, с которой можно каждый файл по
> отдельности кликом открыть.
>
> И ещё. Вы небезопасно используете временный файл для генерации XLS. Если
> два пользователя попытаются выполнить такую операцию, то одному может
> достаться файл от другого или его битый кусок. Если в вашем случае возможно
> генерировать файл в памяти, то лучше сделать именно так:
>
> my $xls_data;
> my $handle = IO::Scalar->new(\$xls_data);
> my $workbook = Spreadsheet::WriteExcel->new($handle);
> ....
> $workbook->close;
> $self->render(data => $xls_data);
>
>
> 20 марта 2014 г., 9:24 пользователь Artem Zhuravlev <
> zhuravlev.ua на gmail.com> написал:
>
> Файлы через веб, загрузка клиентом.
>>
>>
>> 20 марта 2014 г., 12:10 пользователь Alexander Lourier <aml на rulezz.ru>написал:
>>
>> Зависит от того, что такое $self->res, и как вы хотите отдавать файлы.
>>> Если вы формируете email, то Content-type самому письму задаёте
>>> multipart/mixed, потом к письму цепляете каждый аттач отдельным part. Если
>>> это MIME::Entity, то примерно так:
>>> $self->res->attach(Data => $document, Type =>
>>> 'application/vnd.ms-excel', Encoding => 'base64');
>>> $self->res->attach(....);
>>>
>>>
>>>
>>> 2014-03-20 8:54 GMT+01:00 Artem Zhuravlev <zhuravlev.ua на gmail.com>:
>>>
>>>>
>>>>
>>>> Добрый день.
>>>>
>>>> Столкнулся с проблемой рендеринга xls файлов.
>>>>
>>>> my $self = shift;
>>>> my $dir = "/tmp/writeexcel/";
>>>> my $template = "application";
>>>> my $suffix = ".xls";
>>>>
>>>> my $filename = $dir . $template . $suffix;
>>>> # Create a new workbook called simple.xls and add a worksheet
>>>> my $workbook;
>>>> $workbook  = Spreadsheet::WriteExcel->new($filename) or die "Problems
>>>> creating new Excel file: $!" unless defined $workbook;
>>>> my $worksheet = $workbook->add_worksheet("Заявка");
>>>> ... формируем xls файл ...
>>>> $workbook->close() or die "Error closing file: $!";
>>>>
>>>> my $document = do {
>>>>  local $/ = undef;
>>>> open my $fh, "<", $filename
>>>> or die "could not open $filename: $!";
>>>>  <$fh>;
>>>> };
>>>>
>>>> $self->res->headers->content_disposition("attachment;
>>>> filename='file.xls';");
>>>> $self->render(data => $document);
>>>>
>>>> Тут все хорошо.
>>>>
>>>> Не знаю как быть в случае если нужно отдать сразу несколько файлов.
>>>>
>>>> Пните куда смотреть. Думал над тем что архивировать файлы и передать
>>>> архив.
>>>>
>>>> Спасибо.
>>>>
>>>> P.S.  Суть не в самом решении, конечно не буду против, а в том куда
>>>> копать.
>>>>
>>>> --
>>>> Best regards,
>>>> Artem V. Zhuravlev
>>>>
>>>> --
>>>> Moscow.pm mailing list
>>>> moscow-pm на pm.org | http://moscow.pm.org
>>>>
>>>>
>>>
>>> --
>>> Moscow.pm mailing list
>>> moscow-pm на pm.org | http://moscow.pm.org
>>>
>>>
>>
>>
>> --
>> Best regards,
>> Artem V. Zhuravlev
>>
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>>
>>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>


-- 
Best regards,
Artem V. Zhuravlev
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20140320/b6772a8c/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm