Intereting Posts
Лучший способ загрузки контента на мобильный – проблема с wp_is_mobile Как показать термины, используемые только для определенного типа пользовательских сообщений. Создание фильтра Только администратор должен иметь возможность добавлять определенное настраиваемое поле добавить сгенерированную таблицу стилей из родительской темы после child-themes style.css Последний пост таможенной таксономии Правильный способ подключения wp_get_attachment_url Как использовать функцию WP switchEditors.switchto (this) JS в вашем собственном скрипте? Как добавить тег привязки в верхней части сообщений, мимо заголовка и панели навигации? Переименуйте «сообщение» в «статью» во всем конце админа Каков наилучший подход к странице регистрации WordPress и CM? Ссылки WordPress не работают после миграции Захват видео в веб-камерах в Buddypress (и BuddyPress Media) Вывод данных на нескольких страницах на одной странице Получение массива настроек Объединение двух страниц на одну главную страницу

Проблема с загрузкой файла Blob

В настоящее время я пытаюсь загрузить файл архива blob, сохраненный в базе данных

$fid = $_GET['fid']; $sel = $wpdb->get_results( "SELECT * FROM uploads WHERE id = $fid" ); foreach( $sel as $head ) { $name = $head->name; $type = $head->type; $size = $head->size; $content = $head->content; header("Content-length: $size"); header("Content-type: $type"); header("Content-Transfer-Encoding: Binary"); header("Content-Disposition: attachment; filename=$name"); echo $content; exit; } 

каждый раз, когда я перенаправляю на /download?id= когда значение int, присвоенное id загружает файл. Однако вместо того, чтобы браузер запрашивал местоположение загрузки файла, страница считывает двоичное содержимое blob и отображает все это как строку.

любой другой способ загрузки blob на wordpress?

Solutions Collecting From Web of "Проблема с загрузкой файла Blob"

Есть некоторые проблемы с безопасностью. Пожалуйста, дезинформируйте свой ввод, потому что кто-то может загрузить из вашей базы данных нечто иное, чем архив, или просто отбросить вашу базу данных.

$fid = sanitize_text_field( $_GET['fid'] );

Используйте в своем коде следующий заголовок типа содержимого:

 header( "Content-type: application/octet-stream" ); 

Если это не сработает – мы успешно это сделаем, и хотя это маловероятно, это может быть связано с порядком вещей. Попробуйте в следующем порядке:

 Content-type Content-disposition Content-Transfer-Encoding Content-Length 

И как было упомянуто в другом ответе – всегда дезинфицируйте ввод, прежде чем использовать его непосредственно в запросах базы данных.

Отредактировано: Также добавьте, чтобы не было кеширования (взято отсюда ) –

 header('Connection: Keep-Alive'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); 

Отредактировано: Подключите код к функции для запуска в 'init', чтобы она не выводилась в содержание темы.

 add_action( 'init', function () { global $wpdb; $fid = sanitize_text_field( $_GET[ 'fid' ] ); $sel = $wpdb->get_results( "SELECT * FROM uploads WHERE id = $fid" ); foreach ( $sel as $head ) { $name = empty( $head->name ) ? 'myfile.name' : $head->name; $size = empty( $head->size ) ? strlen( $head->content ) : $head->size; header( 'Content-Type: application/octet-stream' ); header( "Content-Disposition: attachment; filename=$name" ); header( 'Content-Transfer-Encoding: Binary' ); header( "Content-Length: $size" ); header( 'Connection: Keep-Alive' ); header( 'Expires: 0' ); header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' ); header( 'Pragma: public' ); echo $head->content; exit(); } } );