2012-06-21 2 views
0

Я разрабатываю API, который позволяет внешним клиентам отправлять двоичный файл, который будет обрабатываться. my web.data() - это строка, а функция, которую я вызываю, требует двоичного кода. Как получить его в правильном формате? Может, у меня неправильные заголовки? как извлечь двоичные данные. Я использую web.py.Python Извлечение двоичного кода из запроса POST с использованием web.py

----------------- Запрос POST --------------------------- -------------------------

import json 
import requests 



files = {'file':('000038fe4b46c210c37bdde767835007', open('000038fe4b46c210c37bdde767835007', 'rb'))} 
headers = {'content-type' : 'application/octet-stream', 'X-Auth-Token':'xxxf'} 
r = requests.post('http://XXX:8080/v1/binaries', files = files, headers = header 

------------------ ----- Функция API ------------------------------

def POST(self): 
       a = web.ctx.env.get("HTTP_X_AUTH_TOKEN", None) 
       creds = authenticator(a) 
       postdata = web.data().read() 
       analysis = atklite.FileAnalysis(data=postdata) 
       metadata = analysis.return_analysis() 

------ ------------------Выслеживать------------------------------- -

File "/usr/lib/pymodules/python2.7/web/application.py", line 242, in process 
    return self.handle() 
    File "/usr/lib/pymodules/python2.7/web/application.py", line 233, in handle 
    return self._delegate(fn, self.fvars, args) 
    File "/usr/lib/pymodules/python2.7/web/application.py", line 415, in _delegate 
    return handle_class(cls) 
    File "/usr/lib/pymodules/python2.7/web/application.py", line 390, in handle_class 
    return tocall(*args) 
    File "/home/XXXXXX/ProcessingCode/bfsapi.py", line 75, in POST 
    postdata = web.data().read() 
AttributeError: 'str' object has no attribute 'read' 

Thanks

Извините, если форматирование все испортилось в сообщении.

+0

web2py - это темная магия. –

+2

Этот вопрос относится к [web.py] (http://webpy.org). [web2py] (http://www.web2py.com/examples/default/index) - это другой проект. – Bryan

ответ

0

Даже если это двоичный файл, чтение исходных данных будет иметь кодированную строку. Вам нужно будет декодировать для преобразования в двоичные данные. Вы можете записать в файл следующим образом:

written = open('binary.file', 'wb') 
for chunk in rawdata.chunks(): 
     written.write(chunk) 
written.close() 
+1

Не могли бы вы рассказать о том, что 'rawdata' в вашем ответе соответствует в вопросе? – starbugs

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