# Router.
$if_admin -> post ( '/attachment/:page_id/add' ) -> name ( 'on_attachment_add' )
-> to ( 'attachment#on_add' ) ;
# Client side (Mojolicious template).
<%= form_for 'on_attachment_add' => { page_id => $self -> stash ( 'id' ) }
=> ( method => 'POST' ) => ( enctype => "multipart/form-data" )
=> begin %>
< input type
= "file" name
= "image_upload" accept = "image/*" > % end
# Controller (on_add)
my $image_file = $self -> req -> upload ( 'image_upload' ) ;
if ( ! $image_file || $image_file -> slurp eq "" || ! $image_file -> headers ||
! $image_file -> headers -> content_type ||
! ( $image_file -> headers -> content_type =~ /image/ ) ) {
$self -> render (
template => 'validation/invalid_data' ,
status => 400
) ;
}
# test.
$t -> post_ok ( '/attachment/test_page/add' => form => {
image_upload => { content => 'aaa' , filename => 'x.png' } ,
image_name => 'new_image.jpg'
} ) -> status_is ( 200 ) ;
IyBSb3V0ZXIuCiRpZl9hZG1pbi0+cG9zdCgnL2F0dGFjaG1lbnQvOnBhZ2VfaWQvYWRkJyktPm5hbWUoJ29uX2F0dGFjaG1lbnRfYWRkJykKICAtPnRvKCdhdHRhY2htZW50I29uX2FkZCcpOwoKIyBDbGllbnQgc2lkZSAoTW9qb2xpY2lvdXMgdGVtcGxhdGUpLgo8JT0gZm9ybV9mb3IgJ29uX2F0dGFjaG1lbnRfYWRkJyA9PiB7IHBhZ2VfaWQgPT4gJHNlbGYtPnN0YXNoKCdpZCcpIH0KICAgICAgICA9PiAobWV0aG9kID0+ICdQT1NUJykgPT4gKGVuY3R5cGUgPT4gIm11bHRpcGFydC9mb3JtLWRhdGEiKQogICAgICAgID0+IGJlZ2luICU+CiAgICA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iaW1hZ2VfdXBsb2FkIiBhY2NlcHQ9ImltYWdlLyoiPgolIGVuZAoKIyBDb250cm9sbGVyIChvbl9hZGQpCm15ICRzZWxmID0gc2hpZnQ7Cm15ICRpbWFnZV9maWxlID0gJHNlbGYtPnJlcS0+dXBsb2FkKCdpbWFnZV91cGxvYWQnKTsKaWYgKCEkaW1hZ2VfZmlsZSB8fCAkaW1hZ2VfZmlsZS0+c2x1cnAgZXEgIiIgfHwgISRpbWFnZV9maWxlLT5oZWFkZXJzIHx8CiAgCSEkaW1hZ2VfZmlsZS0+aGVhZGVycy0+Y29udGVudF90eXBlIHx8CiAgCSEoJGltYWdlX2ZpbGUtPmhlYWRlcnMtPmNvbnRlbnRfdHlwZSA9fiAvaW1hZ2UvKSkgewogICRzZWxmLT5yZW5kZXIoCiAgICB0ZW1wbGF0ZSA9PiAndmFsaWRhdGlvbi9pbnZhbGlkX2RhdGEnLAogICAgc3RhdHVzID0+IDQwMAogICk7Cn0KCiMgdGVzdC4KJHQtPnBvc3Rfb2soJy9hdHRhY2htZW50L3Rlc3RfcGFnZS9hZGQnID0+IGZvcm0gPT4gewogIGltYWdlX3VwbG9hZCA9PiB7IGNvbnRlbnQgPT4gJ2FhYScsIGZpbGVuYW1lID0+ICd4LnBuZycgfSwKICBpbWFnZV9uYW1lID0+ICduZXdfaW1hZ2UuanBnJwp9KS0+c3RhdHVzX2lzKDIwMCk7