Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 1, 2014 17:11:20

int_0x80
Зарегистрирован: 2012-09-27
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Pycurl отправка файла из буфера

Необходимо закачать большое ко-во файлов, которые генерируются программно (хранятся в памяти). Дабы не нагружать диск, хотелось бы отправлять файл без сохранения на диск. Как такое сделать? Отправка идет через multipart form.
Читал этот тред. Там советуют через pycurl.FORM_CONTENTS, pycurl.FORM_FILENAME и pycurl.FORM_CONTENTTYPE. Я попробовал, но на сервер (PHP), приходят данные не в виде файла, а как пост данные (в массив POST, а не FILES) и соответственно скрипт файл не видит.

Офлайн

#2 Сен. 2, 2014 11:04:37

stosu.ru
Зарегистрирован: 2014-08-26
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Pycurl отправка файла из буфера

Кто ж знает какой вы код написали
Попробуйте что-нибудь другое не curl, например:

http://atlee.ca/software/poster/ или
http://docs.python-requests.org/en/latest/user/quickstart/#post-a-multipart-encoded-file



НИЛ СТОСУ / stosu.ru

Офлайн

#3 Сен. 2, 2014 14:13:33

int_0x80
Зарегистрирован: 2012-09-27
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Pycurl отправка файла из буфера

Я бы с радостью, но pycurl я использую не напрямую, а через другую обертку, на которой завязан весь код. В этой обертке (grab) нет возможности отправить файл из буфера, но есть доступ к транспорту (pycurl). Поэтому, вопрос актуален.

Офлайн

#4 Сен. 2, 2014 17:17:37

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Pycurl отправка файла из буфера

int_0x80
Дабы не нагружать диск, хотелось бы отправлять файл без сохранения на диск

tempfs или ramfs

https://ru.wikipedia.org/wiki/Tmpfs
http://rus-linux.net/nlib.php?name=/MyLDP/file-sys/twofs.html

Memory-mapped file
https://docs.python.org/2/library/mmap.html

io
https://docs.python.org/3.3/library/io.html#module-io

FIFO-файл
http://rus-linux.net/MyLDP/BOOKS/lpg-04/node6.htm#SECTION00730000000000000000

Отредактировано Alen (Сен. 2, 2014 17:26:47)

Офлайн

#5 Сен. 3, 2014 11:55:46

int_0x80
Зарегистрирован: 2012-09-27
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Pycurl отправка файла из буфера

Как оказалось проблема в том, что опция pycurl.FORM_FILENAME работает только с опцией pycurl.FORM_FILE.
Доки

CURLFORM_FILENAME

is used in combination with CURLFORM_FILE. Followed by a pointer to a string, it tells libcurl to use the given string as the filename in the file upload part instead of the actual file name.

Ну и хак, обходящий данную ситуацию:
c.setopt(pycurl.HTTPPOST, (('file"; filename="abc.txt', (pycurl.FORM_CONTENTS, 'dasdsadas', pycurl.FORM_CONTENTTYPE, 'plain/text')),))

Отредактировано int_0x80 (Сен. 3, 2014 11:57:35)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version