gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:29:43 25 4
gpt4 key购买 nike

我有一个 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 $1), $1;
}

my $headers = Mojo::Headers->new;
$headers->add( 'Content-Type', 'application/x-download;name=Test.exe' );
$headers->add( 'Content-Disposition', 'attachment;filename=Test.exe' );
$headers->add( 'Content-Description', 'File Transfer');

$self->res->content->headers($headers);
$self->render_data( $bin_data );
};

__DATA__

@@ TestEXE.html.ep
4d5a90000300000004000000ffff0000b8000000000000004000000000000000
00000000000000000000000000000000000000000000000000000000b0000000
0e1fba0e00b409cd21b8014ccd21546836362070726f6772616d2063616e6e6f
....

当我在本地运行它时(通过 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)

此外,您实际上根本不需要 Controller 方法。 Mojolicious 将为您处理这个过程——您所要做的就是为模板命名。
use Mojolicious::Lite;

app->start;

__DATA__

@@ Test.exe (base64)
...

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

——

如果您仍想针对特定于应用程序的问题使用 Controller 方法,请专门获取数据模板:
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-disposition instead of adding it,
# to prevent duplication from elsewhere in the app
$self->res->headers->header(
'Content-Disposition', '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 个字节总是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10057285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com