Python может читать файл изображения в двоичный файл - PullRequest
2 голосов
/ 17 октября 2011

Мне нужно загрузить файл изображения, и я использую MultipartPostHandler.py, как предлагают люди.но все еще не работает.вот мой код:

params = {"upload", open("12345.jpg", "rb")} // in 'rb'
opener = urllib2.build_opener(MultipartPostHandler)
res = opener.open(url, params)

, а вот код в MultipartPostHander:

def multipart_encode(vars, files, boundary = None, buffer = None):
    if boundary is None:
        boundary = mimetools.choose_boundary()
    if buffer is None:
        buffer = ''
    for(key, value) in vars:
        buffer += '--%s\r\n' % boundary
        buffer += 'Content-Disposition: form-data; name="%s"' % key
        buffer += '\r\n\r\n' + value + '\r\n'
    for(key, fd) in files:
        file_size = os.fstat(fd.fileno())[stat.ST_SIZE]
        filename = fd.name.split('/')[-1]
        contenttype = mimetypes.guess_type(filename)[0] or 'application/octet-stream'
        buffer += '--%s\r\n' % boundary
        buffer += 'Content-Disposition: form-data; name="%s"; filename="%s"\r\n' % (key, filename)
        buffer += 'Content-Type: %s\r\n' % contenttype
        # buffer += 'Content-Length: %s\r\n' % file_size
        fd.seek(0)
        buffer += '\r\n' + fd.read() + '\r\n'
    buffer += '--%s--\r\n\r\n' % boundary
    return boundary, buffer
multipart_encode = Callable(multipart_encode)

https_request = http_request

и ошибка появляется в:

buffer += '\r\n' + fd.read() + '\r\n'

ошибка:

'ascii' codec can't decode byte 0xff in position 2: ordinal not in range(128)

эта проблема меня сильно поразила, пожалуйста, помогите мне!ТНХ.

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Я использовал класс MultiPartForm Дуга Хеллмана из его блога для успешной загрузки файлов на наш почтовый сервер: http://pymotw.com/2/urllib2/index.html#module-urllib2

Надеюсь, вы тоже можете это использовать.

0 голосов
/ 18 октября 2011

Я думаю, что это может спасти меня.ага.

# convert every byte of data to the corresponding 2-digit hexadecimal

enter code here hex_str = str (binascii.hexlify (data)) `

# now create a list of 2-digit hexadecimals

hex_list = []

bin_list = []

for ix in range(2, len(hex_str)-1, 2):

    hex = hex_str[ix]+hex_str[ix+1]

    hex_list.append(hex)

    bin_list.append(bin(int(hex, 16))[2:])

#print(bin_list)

bin_str = "".join(bin_list)

print(bin_str)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...