params = {'file': open("test.txt", "rb"), 'name': 'upload test'}
datagen, headers = poster.encode.multipart_encode(params)
request = urllib2.Request(upload_url, datagen, headers)
result = urllib2.urlopen(request)
Я использую библиотеку плакатов для POST для HTTP. Это работает хорошо. Я доволен этим.
Но я хочу попробовать кое-что. Как вы видите выше, чтобы отправить данные файла, мне нужно ОТКРЫТЬ файл. Но есть ли способ не сделать для этого настоящий файл? Мы можем использовать STREAM, например StringIO
, для работы с данными, как с файлами, верно? Но, я не знаю о poster
глубоко. Итак, я хочу знать, как использовать STREAM с poster
.
ДОБАВЛЕН
На самом деле, я пытался отправить данные изображения POST. Я написал это ниже
from PyQt4 import QtCore, QtGui
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import urllib2, os
register_openers()
app = QtGui.QApplication(sys.argv)
pixmap = QtGui.QPixmap("c:/test_img.png")
byte_array = QtCore.QByteArray()
buffer = QtCore.QBuffer(byte_array)
buffer.open(QtCore.QIODevice.WriteOnly)
pixmap.save(buffer, "PNG")
from cStringIO import StringIO
datagen, headers = multipart_encode({"image": StringIO(str(byte_array.toBase64()))})
request = urllib2.Request(upload_url, datagen, headers)
_rnt = urllib2.urlopen(request)
Но я получаю эту ошибку:
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
_rnt = urllib2.urlopen(request)
File "C:\Python26\lib\urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "C:\Python26\lib\urllib2.py", line 397, in open
response = meth(req, response)
File "C:\Python26\lib\urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python26\lib\urllib2.py", line 435, in error
return self._call_chain(*args)
File "C:\Python26\lib\urllib2.py", line 369, in _call_chain
result = func(*args)
File "C:\Python26\lib\urllib2.py", line 518, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 500: Internal Server Error
params
иdatagen
исчезнут, но никаких гарантий; в других реализациях еще хуже. - person abarnert   schedule 13.11.2012poster
)? - person abarnert   schedule 13.11.2012datagen
иheaders
, чтобы убедиться, что они разумны, и выполните более простой тест без всегоQt
, где вы просто отправляетеStringIO
с данными, которые хотите закончить с. - person abarnert   schedule 13.11.2012upload_url
общедоступной службой? Или, если нет, у вас есть исходный код и вы можете его где-нибудь опубликовать (вместе с инструкциями по установке)? Это позволит другим людям помочь вам проверить, что происходит не так. - person abarnert   schedule 13.11.2012upload_url
проверю, но это не моя обязанность, так что как-нибудь возьмется. - person Hyun-geun Kim   schedule 14.11.2012QPixmap
, рендеринг этогоQPixmap
в буфер, затем кодирование и отправка этого буфера занимает больше времени, чем простое кодирование и отправка файла PNG напрямую. - person abarnert   schedule 14.11.2012