2015-01-31 2 views
-2

Вот answer, который дает некоторую информацию о том, как закодировать файл base64. Тем не менее, я также хочу передать в filetype и mimetype. для информации в кодировке base64.Подготовить информацию в кодировке base64

До сих пор у меня есть для моей base64 строки:

x=base64.b64encode(open('/Users/user/Desktop/img.PNG').read()) 

Какова правильная информация предварять, и как бы я это сделать?

+3

Вы должны быть более конкретными. Как вы ожидаете, что мы узнаем, какая именно информация вам нужна, не говоря уже о том, как ее представлять. Мы не знаем, что вы делаете с строкой base64 ... –

+0

@TomDalton благодарит за отзыв. Пользователь передает нам строку base64, и мы загружаем этот файл, чтобы пользователь мог загрузить его с URL-адреса. Наличие расширения полезно для выполнения чего-то вроде «http://myurl.com/file.png» – David542

+0

Вы ищете ['uu'] (https://docs.python.org/3/library/uu.html)? – 5gon12eder

ответ

1

возможно что-то вдоль этих линий:

from __future__ import print_function 
import base64 
import binascii 
import os 

def base64_encode_file(filename): 
    filetype = os.path.splitext(filename)[1][1:] # remove leading '.' from ext 
    with open(filename) as file: 
     data = file.read() 
     return base64.b64encode(','.join((filename, filetype, data))), data 

filename = 'C:/Users/martin/Desktop/img.PNG' 
#filename = '/Users/user/Desktop/img.PNG' 

encoded, data = base64_encode_file(filename) 
print('encoded: {} (hex file data: {})'.format(encoded, binascii.hexlify(data))) 

decoded = base64.b64decode(encoded).split(',', 2) 
print('decoded:', decoded[0], decoded[1], binascii.hexlify(decoded[2])) 

Выход:

encoded: QzovVXNlcnMvbWFydGluL0Rlc2t0b3AvaW1nLlBORyxQTkcsiVBORwo= 
      (hex file data: 89504e470a) 
decoded: C:/Users/martin/Desktop/img.PNG PNG 89504e470a 
+0

Я только сделал 'base64_encode_file()' возвращает как закодированную информацию, так и необработанные данные файла, чтобы было легко убедиться, что все было сделано правильно после завершения декодирования, - так что ', data' на Операция 'return' может быть остановлена, потому что для получения требуемой функциональности требуется вернуть только закодированную строку. – martineau

3

Похоже, следующее, как я хотел бы получить информацию о base64 файл передать на сервер:

file = '/Users/user/Desktop/img.PNG' 
prepend_info = 'data:%s;base64' % mimetypes.guess_type(file)[0] 
base_64_data = open(file).read().encode('base64') 
image_data_base64 = '%s,%s' % (prepend_info, base_64_data) 

Это тогда дает мне:

data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wB... 
+0

Кажется разумным! :-) –

Смежные вопросы