perl – 从我的脚本下载文件时,前8个字节总是错误的

perl – 从我的脚本下载文件时,前8个字节总是错误的,第1张

概述我有一个Mojolicious Lite脚本,“发出”一个可执行文件(用户可以从脚本的URL下载该文件).我将编码数据保存在DATA部分的内联模板中,然后对其进行编码和render_data. get '/download' => sub { my $self = shift; my $hex_data = $self->render_partial( 'TestEXE' ); 我有一个MojolicIoUs lite脚本,“发出”一个可执行文件(用户可以从脚本的URL下载该文件).我将编码数据保存在DATA部分的内联模板中,然后对其进行编码和render_data.

get '/download' => sub {    my $self = shift;    my $hex_data = $self->render_partial( 'TestEXE' );    my $bin_data;    while( $hex_data =~ /([^\n]+)\n?/g ) {        $bin_data .= pack "H".(length ),;    }    my $headers = Mojo::headers->new;     $headers->add( 'Content-Type','application/x-download;name=Test.exe' );    $headers->add( 'Content-dis@R_404_4612@','attachment;filename=Test.exe' );    $headers->add( 'Content-Description','file Transfer');    $self->res->content->headers($headers);    $self->render_data( $bin_data ); };__DATA__@@ TestEXE.HTML.ep4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000b00000000e1fba0e00b409cd21b8014ccd21546836362070726f6772616d2063616e6e6f....

当我在本地运行(通过内置的网络服务器在http://127.0.0.1:3000/,Win7)我得到正确的文件(大小和内容).但是当我在共享主机(linux)上以CGI模式运行它时,它返回正确的大小,但文件的前8个字节总是不正确(并且总是不同).文件的其余部分是正确的.

如果在我的sub中指定$hex_data而不是$bin_data,我会得到假设存在的东西.

我迷路了.

解决方法 render_partial不是你想要的.

首先,re-encode the executable in base64 format,并指定模板是base64编码的(这假设十六进制不是您的应用程序的要求):

@@ template-name (base64)

此外,您根本不需要控制器方法. MojolicIoUs将为您处理这个过程 – 您只需要为模板命名即可.

use MojolicIoUs::lite;app->start;__DATA__@@ Test.exe (base64)...

然后http://127.0.0.1:3000/Test.exe将下载该文件.

如果您仍希望将控制器方法用于特定于应用程序的问题,请专门获取数据模板:

use MojolicIoUs::lite;get '/download' => sub {    my $self = shift;    # http://mojolicio.us/perldoc/MojolicIoUs/Renderer.pm#get_data_template    my $data = $self->app->renderer->get_data_template({},'Test.exe');    # Replace content-dis@R_404_4612@ instead of adding it,# to prevent duplication from elsewhere in the app    $self->res->headers->header(        'Content-dis@R_404_4612@','attachment;filename=name.exe');    $self->render_data($data);};app->start;__DATA__@@ Test.exe (base64)...

http://127.0.0.1:3000/download将获取模板,设置标题,然后将其下载为name.exe.

总结

以上是内存溢出为你收集整理的perl – 从我的脚本下载文件时,前8个字节总是错误的全部内容,希望文章能够帮你解决perl – 从我的脚本下载文件时,前8个字节总是错误的所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1239406.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存