2013-10-09 7 views
0

Я хочу разрешить пользователям загружать определенный файл с сервера и разрешать им выбирать имя файла.PHP «Сохранить как ...» файл

Это файл JSON.

У меня есть следующий скрипт, который работает, но он автоматически именование файла:

if (file_exists($myFile)){ 
    header ("Content-Type: application/download"); 
    header ("Content-Disposition: attachment; filename=$myFile"); 
    header("Content-Length: " . filesize("$myFile")); 
    $fp = fopen("$myFile", "r"); 
    fpassthru($fp); 
} else { 
    echo "no file exists"; 
}; 
+2

Все зависит от браузера, чтобы дать пользователю выбор имени или сохранить его с именем «по умолчанию». Вы не можете ничего с этим поделать. – deceze

ответ

0

Просто измените header ("Content-Disposition: attachment; filename=$myFile"); быть header ("Content-Disposition: attachment; filename=$chosenFileName"); где $ chosenFileName этого имя, предоставленное пользователем.

+0

Привет, это идея, но $ selectedFileName должно быть предоставлено в диалоговом окне, когда пользователь нажимает кнопку, которая запускает этот скрипт. –

+0

Это довольно неудобное решение. Браузеры имеют свои собственные * save-as * диалоги, и эти решения создают еще один диалог * save-as *. Это означает, что пользователи, которые автоматически установили браузер для загрузки файла, то есть пользователи, которые ** не хотят видеть диалог * save-as *, будут видеть вашу версию этого диалога, в то время как пользователи, которые устанавливают свои браузер, чтобы отобразить диалог * save-as *, будет отображаться ** два ** * save-as * диалоговые окна. –

1

Браузеры открывают, что сохранять как диалог в зависимости от типа содержимого. В браузере пользователь может указать, какой тип mime должен открываться и каким образом.

кстати. обычно вы указываете для json тип mime application/json - см. RFC 4627

Вы можете попытаться установить тип application/octet-stream.

но как я писал - это зависит от настроек пользователя.

В Firefox он может быть изменен таким образом: https://support.mozilla.org/en-US/kb/change-firefox-behavior-when-open-file

0

Шаг - 1. Сначала нажмите кнопку загрузки, чтобы открыть форму с именем входного файла (открытое всплывающее окно или другая его страница)

Шаг - 2 Теперь дайте имя файла (я имею в виду, введите имя в текстовое поле и нажмите отправить);

Шаг - 3 При отправке отправьте запрос в виде сообщения (method = 'POST') в файл загрузки. это выглядит как $ _POST ['filename'];

Шаг - 4

if($_POST['filename']){ 
    $filename = $_POST['filename']; 
} 

if (file_exists($myFile)){ 
    header ("Content-Type: application/download"); 
    header ("Content-Disposition: attachment; filename=$filename "); 
    header("Content-Length: " . filesize("$filename ")); 
    $fp = fopen("$filename ", "r"); 
    fpassthru($fp); 
} else { 
    echo "no file exists"; 
}; 

Я надеюсь, что это поможет .. !!

Смежные вопросы