Я пишу код для загрузки файлов в форматах изображений и видео. Когда форма является кодом, она принудительно загружается. Однако, когда я go открываю загруженный файл, они не могут быть прочитаны. Я не уверен, что мне не хватает типа заголовка контента или что. Я проверил на этом сайте, и мой код почти идентичен многим из приведенных ответов.
if($_SERVER['REQUEST_METHOD'] === 'POST'){
if(isset($_POST['so_media'])){
//validate file mime type
function check_doc_mime( $tmpname ) {
// MIME types: http://filext.com/faq/office_mime_types.php
$tmpname = str_replace(get_site_url().'/wp-content/uploads', '',$tmpname);
$tmpname= wp_upload_dir()['basedir'].$tmpname;
if(!file_exists($tmpname)){
var_dump('FILE DOES NOT EXIST');
return FALSE;
}
$finfo = finfo_open( FILEINFO_MIME_TYPE );
var_dump($finfo);
$mtype = finfo_file( $finfo, $tmpname );
var_dump($mtype);
finfo_close( $finfo );
if( $mtype == ( "image/jpeg" ) ||
$mtype == ( "image/png" ) ||
$mtype == ( "image/gif" ) ||
$mtype == ( "video/mp4" )
) {
var_dump('Valid Mime type');
return $mtype;
} else {
var_dump('Invalid Mime type');
return FALSE;
}
}
if($mtype = check_doc_mime($_POST['so_media'])){
$file_name = str_replace(get_site_url().'/wp-content/uploads', '', $_POST['so_media']);
$file_name = wp_upload_dir()['basedir'].$_POST['so_media'];
$file_url = $file_name;
header('Content-Description: File Transfer');
header('Content-Type: '.$mtype);
header('Expires: 0');
header("Content-Transfer-Encoding: Binary");
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\"");
header('Content-Length: ' . filesize($file_url));
ob_clean();
flush();
readfile($file_url);
exit;
}
}
}
//Code for the form
<form method='post' action='<?php $current_url;?>' style='display:inline-block;'>
<input type='hidden' name='so_media' value='<?php echo $item_so_meta['upload']['url']; ?>'>
<button class='button-white' type='submit'>Download Attached Media</button>
</form>
//end form