Найти - Пользователи
Полная версия: сохранение файлов из blob куда укажет пользователь
Начало » Web » сохранение файлов из blob куда укажет пользователь
1 2 3
artemvv
Задача такая.
Пользователь должен иметь возможность по ссылке на сайте на питоновский скрипт сохранить файл из БД (mySQL) к себе на компьютер.
Как вытащить данные из blob - понятно (select).
Как сохранить - понятно (file.write())

Но чтобы сохранить файл на пользовательском компьютере, пользователь должен выбрать каким-то образом путь.
Как это сделать?

Заранее спасибо!
pasaranax
Формировать файл во временной директории на сервере и давать пользователю ссылку. Таким образом можно еще и кэширование организовать.
Либо в заголовке страницы указывать тип передаваемых данных как бинарный и выводить текст прямо в браузер.
И кстати, если данные - это скрипт, то что мешает просто вывести его в браузер в виде текста, а юзеру сказать сохранить страницу с расширением .py?
artemvv
pasaranax
Формировать файл во временной директории на сервере и давать пользователю ссылку. Таким образом можно еще и кэширование организовать.
Либо в заголовке страницы указывать тип передаваемых данных как бинарный и выводить текст прямо в браузер.
И кстати, если данные - это скрипт, то что мешает просто вывести его в браузер в виде текста, а юзеру сказать сохранить страницу с расширением .py?
У меня в БД хранятся doc, pdf - файлы. Плучается подходит только первый вариант:
Формировать файл во временной директории на сервере и давать пользователю ссылку.
Можно ли для таких файлов использовать второй способ: Либо в заголовке страницы указывать тип передаваемых данных как бинарный и выводить текст прямо в браузер. Не подкините прмер?

Но тут, как мне кажется, не так всё просто.
Во-первых, как передать пользователю ссылку? Формировать новую страницу со ссылкой на файл, тогда пользователю придётся ещё раз жать на ссылку “Скачать”?
Во-вторых, как удалять временные файлы с сервера?

Спасибо!
artemvv
Я пытаюсь в заголовке страницы указывать тип передаваемых данных как бинарный и выводить текст прямо в браузер.

но ничего не получается:

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

Выводится как есть: сеачала заголовки, потом бинарный код файла.
igor.kaist
не то… Я так понимаю вы через cgi работаете?
Первой строкой, отдаваемой cgi сценарием должен быть заголовок Content-Type
пример есть снизу этой страницы.
Вам достаточно исправить content-type на свой и “напечатать” файл.
artemvv
Да, cgi.
Делаю, как в примере:

print ‘Content-type: application/pdf \n’
print row

1. открывается в браузере пустой pdf
2. Нужно чтобы файл не открывался, а предлагал пользователю его сохранить/открыть.
artemvv
P.S. row - это из select из столбца blob БД.
artemvv
Я так понял, чтобы файл скачивался нужен такой скрипт:

print “Content-Type:application/x-force-download\n”
print row

Но и так не работает.
потому что что-то:
1. сохранияется pdf, но имя имеет скрипта main.py
2. после переименования pdf пустой, что-то там меняется. Я это вижу, сравнивая в блокноте нормальный и испорченный pdf-файлы.

В интернете нигде не могу найти примеров.
Спасибо заранее!)
artemvv
Сформулирую задачу заново. Может быть кто-нибудь ответит…

В таблице базы данных в одной из колонок хранятся файлы разичных типов: 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.

Мне бы работающий пример, и всё бы получилось.
Помогите, пожалуйста.
dimabest
чтобы броузер показал окно с предложением сохранить файл нужен еще заголовок ‘content-disposition’:
print 'Content-type: application/pdf \n'  
print 'Content-Disposition: attachment; filename=name.pdf'
вместо name.pdf желательно указать реальное имя файла
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB