Форум сайта python.su
Задача такая.
Пользователь должен иметь возможность по ссылке на сайте на питоновский скрипт сохранить файл из БД (mySQL) к себе на компьютер.
Как вытащить данные из blob - понятно (select).
Как сохранить - понятно (file.write())
Но чтобы сохранить файл на пользовательском компьютере, пользователь должен выбрать каким-то образом путь.
Как это сделать?
Заранее спасибо!
Офлайн
Формировать файл во временной директории на сервере и давать пользователю ссылку. Таким образом можно еще и кэширование организовать.
Либо в заголовке страницы указывать тип передаваемых данных как бинарный и выводить текст прямо в браузер.
И кстати, если данные - это скрипт, то что мешает просто вывести его в браузер в виде текста, а юзеру сказать сохранить страницу с расширением .py?
Офлайн
pasaranaxУ меня в БД хранятся doc, pdf - файлы. Плучается подходит только первый вариант:
Формировать файл во временной директории на сервере и давать пользователю ссылку. Таким образом можно еще и кэширование организовать.
Либо в заголовке страницы указывать тип передаваемых данных как бинарный и выводить текст прямо в браузер.
И кстати, если данные - это скрипт, то что мешает просто вывести его в браузер в виде текста, а юзеру сказать сохранить страницу с расширением .py?
Офлайн
Я пытаюсь в заголовке страницы указывать тип передаваемых данных как бинарный и выводить текст прямо в браузер.
но ничего не получается:
print '<!DOCTYPE HTML PUBLIC \“-//W3C//DTD HTML 4.01 Transitional//EN\” \"http://www.w3.org/TR/html4/loose.dtd\“>'
print ‘'
print ’<head>'
print ‘<meta http-equiv=\”Content-Type\“ content=\”application/x-force-download; name=1.doc\“ />’
print ‘<meta http-equiv=\”Content-Disposition\“ filename=\”1.doc\">’
print ‘</head>’
print row
Выводится как есть: сеачала заголовки, потом бинарный код файла.
Офлайн
не то… Я так понимаю вы через cgi работаете?
Первой строкой, отдаваемой cgi сценарием должен быть заголовок Content-Type
пример есть снизу этой страницы.
Вам достаточно исправить content-type на свой и “напечатать” файл.
Офлайн
Да, cgi.
Делаю, как в примере:
print ‘Content-type: application/pdf \n’
print row
1. открывается в браузере пустой pdf
2. Нужно чтобы файл не открывался, а предлагал пользователю его сохранить/открыть.
Офлайн
P.S. row - это из select из столбца blob БД.
Офлайн
Я так понял, чтобы файл скачивался нужен такой скрипт:
print “Content-Type:application/x-force-download\n”
print row
Но и так не работает.
потому что что-то:
1. сохранияется pdf, но имя имеет скрипта main.py
2. после переименования pdf пустой, что-то там меняется. Я это вижу, сравнивая в блокноте нормальный и испорченный pdf-файлы.
В интернете нигде не могу найти примеров.
Спасибо заранее!)
Офлайн
Сформулирую задачу заново. Может быть кто-нибудь ответит…
В таблице базы данных в одной из колонок хранятся файлы разичных типов: pdf, doc, tif.
Скрипт main.py формирует для пользователя html-страницу со списком этих файлов.
Когда пользователь кликает по одному из названий, соответствующий файл достаётся из БД с помощью select.
Непонятно, как сделать так, чтобы пользователь мог сохранить этот файл у себя на компьютере. Я так понимаю для этого скрипт формирует новую страницу с соответствующим итипом. Я перепробовал различные варианты:
print ‘Content-type: application/pdf \n’
print “Content-Type:application/x-force-download\n”.
Но при сохранении файл изменяется и при открытии оказвается пустым (pdf), сам он не пустой, но информация как-то повреждена. К тому же, сохраняетя он под именем скрипта main.py, а не 1.pdf.
Мне бы работающий пример, и всё бы получилось.
Помогите, пожалуйста.
Офлайн
чтобы броузер показал окно с предложением сохранить файл нужен еще заголовок ‘content-disposition’:
print 'Content-type: application/pdf \n'
print 'Content-Disposition: attachment; filename=name.pdf'
Офлайн