Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » сохранение файлов из blob куда укажет пользователь [RSS Feed]

#1 Дек. 8, 2009 21:29:21

artemvv
От:
Зарегистрирован: 2009-12-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение файлов из blob куда укажет пользователь

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

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

Заранее спасибо!



Офлайн

#2 Дек. 8, 2009 22:21:02

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение файлов из blob куда укажет пользователь

Формировать файл во временной директории на сервере и давать пользователю ссылку. Таким образом можно еще и кэширование организовать.
Либо в заголовке страницы указывать тип передаваемых данных как бинарный и выводить текст прямо в браузер.
И кстати, если данные - это скрипт, то что мешает просто вывести его в браузер в виде текста, а юзеру сказать сохранить страницу с расширением .py?



Офлайн

#3 Дек. 9, 2009 06:31:36

artemvv
От:
Зарегистрирован: 2009-12-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение файлов из blob куда укажет пользователь

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

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

Спасибо!



Офлайн

#4 Дек. 9, 2009 09:24:43

artemvv
От:
Зарегистрирован: 2009-12-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение файлов из blob куда укажет пользователь

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

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

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

Выводится как есть: сеачала заголовки, потом бинарный код файла.



Офлайн

#5 Дек. 9, 2009 09:57:33

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

сохранение файлов из blob куда укажет пользователь

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



Офлайн

#6 Дек. 9, 2009 11:40:29

artemvv
От:
Зарегистрирован: 2009-12-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение файлов из blob куда укажет пользователь

Да, cgi.
Делаю, как в примере:

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

1. открывается в браузере пустой pdf
2. Нужно чтобы файл не открывался, а предлагал пользователю его сохранить/открыть.



Офлайн

#7 Дек. 9, 2009 11:42:11

artemvv
От:
Зарегистрирован: 2009-12-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение файлов из blob куда укажет пользователь

P.S. row - это из select из столбца blob БД.



Офлайн

#8 Дек. 9, 2009 12:43:11

artemvv
От:
Зарегистрирован: 2009-12-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение файлов из blob куда укажет пользователь

Я так понял, чтобы файл скачивался нужен такой скрипт:

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

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

В интернете нигде не могу найти примеров.
Спасибо заранее!)



Офлайн

#9 Дек. 9, 2009 14:24:11

artemvv
От:
Зарегистрирован: 2009-12-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение файлов из blob куда укажет пользователь

Сформулирую задачу заново. Может быть кто-нибудь ответит…

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

Мне бы работающий пример, и всё бы получилось.
Помогите, пожалуйста.



Офлайн

#10 Дек. 9, 2009 22:44:11

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

сохранение файлов из blob куда укажет пользователь

чтобы броузер показал окно с предложением сохранить файл нужен еще заголовок ‘content-disposition’:

print 'Content-type: application/pdf \n'  
print 'Content-Disposition: attachment; filename=name.pdf'
вместо name.pdf желательно указать реальное имя файла



Офлайн

  • Начало
  • » Web
  • » сохранение файлов из blob куда укажет пользователь[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version