Я работаю над веб-приложением, и одна из функций, которая ему нужна, - это возможность интерактивно загружать довольно большой файл - этот файл не существует на сервере - и полностью состоит из данных, динамически загружаемых из базы данных.
В настоящее время я использую следующий код (не запускается для вас, но вы можете понять идею), в котором я добавляю текстовое поле с именем файла, затем скрытую текстовую область, содержащую весь текст, необходимый для загрузки стиля json, а затем это связано к функции, которая пытается загрузить URI.
Интересно, что при запуске в Chrome я получаю страницу с сообщением, что URI слишком длинный и он не будет работать и т. д., но файл все равно загружается.
"Отправленный URI слишком велик! Длина запрошенного URL превышает ограничение емкости для этого сервера. Запрос не может быть обработан. Если вы считаете, что это ошибка сервера, обратитесь к веб-мастеру."
В любом случае, раздражает вот что: страница, которая позволяет эти загрузки, использует сообщение/получение с предыдущей страницы, поэтому кнопка «Назад» не может использоваться, поскольку она дает нам:
«Подтвердить повторную отправку формы Для правильного отображения этой веб-страницы требуются данные, которые вы ввели ранее. Вы можете отправить эти данные еще раз, но тем самым вы повторите любое действие, которое эта страница ранее выполняла».
страница. Мне бы хотелось, чтобы эти загрузки URI появлялись на новой вкладке, поэтому кнопка «Назад» не нужна, хотя добавление целевого пробела не помогло.
Также интересно - как показано выше, у меня также есть функция «загрузить все», которая работает для меня, запуская вещи локально на сервере xampp, в google chrome, однако те, кто создает приложение, сообщают, что кнопка не работает для них ( они на Mac используют сафари, у меня еще не было возможности увидеть это лично и собрать информацию - так что, хотя я не ОЖИДАЮ ответа на этот вопрос с моей ограниченной информацией, я надеюсь, что у кого-то может быть идея!)
КОД:
< script >
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
// I tried addin this but no new tab appeared!
//element.target = "_blank:";
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
function download_all() {
var nameElements = document.getElementsByName("name");
var valueElements = document.getElementsByName("text");
for (i = 0; i < nameElements.length; i++) {
console.log(nameElements[i].value);
console.log(valueElements[i].value);
download(nameElements[i].value, valueElements[i].value);
}
} <
/script>
echo "
<form onsubmit=\ "download(this['name'].value, this['text'].value)\" class=\ "form-group\">"; echo "<label for=\ "name\">Download Title</label>"; echo "<input type=\ "text\" name=\ "name\" size=\ "40\" value=\ "" . $m[ 'name'] . ".json" . "\" class=\ "form-inline\">"; //hidden=\"hidden\"> after text echo "<textarea name=\ "text\" hidden=\
"hidden\">" . $json_meal_data . "</textarea>"; echo "<input type=\ "submit\" value=\ "Download\" class=\ "btn-primary\">"; echo "</form>"; echo "<br>"; echo "<br>";
Также определенно стоит отметить, что я включил функцию «Загрузить все» в приведенные выше фрагменты. Как ни странно, при запуске этой загрузки в Chrome загружаются все файлы, а при запуске в Safari загружается только 1 файл.