Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
сохранить файл на клиенте
|
|||
|---|---|---|---|
|
#18+
Задача: есть запрос к серверу с PHP, который принимая параметры запроса делает сложные вычисления. Результат вычислений надо частично отдать обратно в виде странички (ну там ошибки, и чего ишо), а основной результат чтобы отдавался клиенту в виде файла csv, xls, xml, etc. Вопрос: может ли сервер сохранить как-то и что-то в файл на клиентской машине? Я так понимаю нет. Вариант - отдать сначала страничку, а файл сгенерить и положить во временную или какую ещё папку на сервере и дать клиенту на него ссылку - не проходит. Нет способа узнать "скачал" его клиент и сколько его ещё хранить надо... а надо, если не скачал - удалить файл сразу по закрытию странички в браузере. То есть "хранить" нельзя (ЗПД). Какие ещё решения могут быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2013, 16:36 |
|
||
|
сохранить файл на клиенте
|
|||
|---|---|---|---|
|
#18+
Генерить файл "на лету" по запросу от клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2013, 17:11 |
|
||
|
сохранить файл на клиенте
|
|||
|---|---|---|---|
|
#18+
vkle, Как описать ссылку? Скажем я указал href="/mainPage/file.xls" и генерю этот вариант файла, но в процессе генерации возникает ситуация "облома" и мне надо выдать полноценную диагностику... и? Я как раз и хотел отдавать страничку в браузер с обломами, а файл сохранять куда-то в песочницу браузера. И вот если "всё хорошо", чтобы браузер мог его записать как рабочий файл на машину клиента тем же js. В этом случае, на сервере НЕ собирается мусор ненужных файлов, файл если не нужен клиенту - пропадает из песочницы по факту закрытия страницы, а если нужен - сохраняется браузером уже без обращения к серверу... как-то так хотелось. Мож знает кто как это сделать, или низзя? Как вариант: загрузить содержимое файла в скрытый textarea и оттуда выгонять в файл через js... но, в таком случае всякая "чухня" в содержимом может легко нарушить структуру страницы, это раз (можно обойти). Да и непонятно как потом явяскриптом сохранить содержимое на клиенте... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2013, 07:45 |
|
||
|
сохранить файл на клиенте
|
|||
|---|---|---|---|
|
#18+
Arhat109Скажем я указал href="/mainPage/file.xls" и генерю этот вариант файла, но в процессе генерации возникает ситуация "облома" и мне надо выдать полноценную диагностику... и? Я как раз и хотел отдавать страничку в браузер с обломами, а файл сохранять куда-то в песочницу браузера.Если нет ошибок - отдаете файл. Или отдаете страничку с отчетом в случае "облома". Сам файл при этом формировать не нужно. А на страничке с отчетом об ошибках даете ссылку на скачивание этого же файла, но без формирования html-отчета в случае "облома". Например, так: href="/mainPage/file.xls?mode=noReport". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2013, 08:02 |
|
||
|
сохранить файл на клиенте
|
|||
|---|---|---|---|
|
#18+
Вдогонку... Однако, давайте рассмотрим случай, когда для формирования файла (или отчета об ошибках) требуется произвести много ресурсоемких вычислений и повторно их делать нет резона. В таком случае делаете папку временных файлов и определяете что файл должен храниться не более какого-то времени. Скажем, один час. Или десять минут. Это уж по ситуации выбрать. И указываете это время (или "файл доступен для скачивания до ЧЧ часов ММ минут") на страничке с отчетом. Все файлы возрастом старше одного часа (или десяти минут) удаляете из папки сразу при запуске скрипта. Если на момент удаления файл скачивается, то физическое удаление файла будет выполнено позже - файловая система не позволит немедленно удалить занятый файл. Таким образом, "лишние" файлы на сервере будут находится, но в каком-то небольшом количестве. Имя временного файла придется каким-то образом привязать к пользователю. Например, добавить к нему идентификатор сессии пользователя. Если файлов на одного пользователя может быть несколько, то к сессии еще добавить какое-то случайное число как идентификатор файла. В ссылке на скачивание файла указываете этот идентификатор. При отдаче файла берете этот идентификатор из GET, добавляете к нему ID сессии, проверяете наличие файла. По результатам проверки выдаете либо сообщение об ошибке (прошло много времени и файл уже удален), либо отдаете этот файл и удаляете его. Впрочем, если хотите, можете и не удалять - вдруг пользователь оказался "шляпой", нажал отмену вместо сохранения и решил скачать заново... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2013, 08:25 |
|
||
|
сохранить файл на клиенте
|
|||
|---|---|---|---|
|
#18+
vkle, ну вот что-то похожее и у меня нарисовалось. Получается сохранить в "песочнице" браузера и вытащить на локаль клиента скриптом "по требованию" - никак, так? Просто уже не помню описание стандарта, а лезть копать заново - лениво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2013, 10:02 |
|
||
|
сохранить файл на клиенте
|
|||
|---|---|---|---|
|
#18+
Arhat109Получается сохранить в "песочнице" браузера и вытащить на локаль клиента скриптом "по требованию" - никак, так?Сохранить в песочнице скорее всего можно, а насчет вытащить и сохранить локально - сомневаюсь. Да и с кроссбраузерностью наверняка будет все непросто. Спросите в профильном форуме , там люди более сведущи в этих делах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2013, 11:07 |
|
||
|
|

start [/forum/topic.php?fid=23&fpage=101&tid=1463361]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 370ms |

| 0 / 0 |
