Mojo 作为文件共享服务器

There's more than one way to do it!
https://metacpan.org http://perlmonks.org
回复
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

Mojo 作为文件共享服务器

帖子 523066680 »

日常小工具,用来把当前文件夹的特定格式文件开放到服务器,便于手机访问下载。
我会这么做是因为,今天用QQ下载电脑传的文件,竟然反复失败……;用微信传文件,要去文件夹里翻,实在受不了。

代码: 全选

# code by 523066680 funicode.net
use Mojolicious::Lite;
use File::Basename;
use URI::Escape;

STDOUT->autoflush(1);

my $app = app;
my $static = $app->static;
my $pwd = $ENV{PWD};

my $port = 3000;
my $localhost = get_localhost_ip();

push @{$static->paths}, ( $pwd );
push @{$static->paths}, ( "E:/Temp/Share" );

my @files = glob "*.mp4";
for my $e ( @files )
{
    my $url = sprintf "http://%s:%s/%s", $localhost, $port, uri_escape(basename($e));
    printf "%s\n", $url;
}

get '/' => sub {
    my $self = shift;
    #... do something for a homepage here ...
};

$app->start('daemon', '-l', "http://*:${port}");


sub get_localhost_ip
{
    my $result = `ipconfig /all`;
    if ( $result =~ /WLAN:.*?IPv4 .*?:\s+([\d\.]+)/msi )
    {
        return $1;
    }
}

其中 get_localhost_ip 函数用于从 ipconfig /all 中获取本机的局域网IP

头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

中文路径时链接访问无效问题 Re: Mojo 作为文件共享服务器

帖子 523066680 »

补充,考虑中文路径可能导致一些访问的问题,$pwd 改为相对目录 "./"

代码: 全选

=info
    Code by 523066680 Funicode.net
    2023-10
=cut

use utf8;
use Encode;
use Modern::Perl;
use Mojolicious::Lite;
use File::Slurp;
use File::Basename;
use URI::Escape;
STDOUT->autoflush(1);

my $app = app;
my $static = $app->static;
my $pwd = $ENV{PWD};

my $port = 3000;
my $localhost = get_localhost_ip();

# 如果使用 文件夹完整地址,文件夹名称含有中文时,可能导致访问失败。
# 使用相对路径可以暂时略过该问题
push @{$static->paths}, ( "./" );
push @{$static->paths}, ( "E:/Temp/Share" );

my @files = glob "*.mp4 *.mp3 *.gif";
for my $e ( @files )
{
    my $url = sprintf "http://%s:%s/%s", $localhost, $port, uri_escape(basename($e));
    printf "%s\n", $url;
}

get '/' => sub {
    my $self = shift;
    #... do something for a homepage here ...
};

$app->start('daemon', '-l', "http://*:${port}");


sub get_localhost_ip
{
    my $result = `ipconfig /all`;
    if ( $result =~ /WLAN:.*?IPv4 .*?:\s+([\d\.]+)/msi )
    {
        return $1;
    }
}

sub gbk { encode('gbk', $_[0]) }
sub utf8 { encode('utf8', $_[0]) }
sub u2gbk { encode('gbk', decode('utf8', $_[0])) }
sub uni { decode('utf8', $_[0]) }
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 9 访客