2016-08-09 3 views
1

Ich versuche ein Bild zu veröffentlichen, um es über meine REST API zu verarbeiten. Ich benutze Falcon für das Backend, konnte aber nicht herausfinden, wie die Daten gepostet und empfangen werden.Was ist der richtige Weg, um ein Bild in die REST-API zu stellen und Daten mit der Falcon-Bibliothek zu sammeln?

Dies ist, wie ich meine Datei derzeit

img = open('img.png', 'rb') 
r = requests.post("http://localhost:8000/rec", 
files={'file':img}, 
data = {'apikey' : 'bla'}) 

jedoch am Falcon Repo senden sie sagen, dass Falcon keine Daten HTML-Formulare unterstützen anstatt schicken es zielt darauf ab, in vollem Umfang von POSTed und puted Daten, die ich nicht tun differenziere POST-Bilddaten und die wie oben gesendete.

Schließlich möchte ich lernen, was die richtige Problemumgehung ist, um ein Bild zu senden und es von einer REST API zu erhalten, die angeblich von Falcon geschrieben wurde. Könntest du ein paar Hinweise geben?

Antwort

1

dies für Sie die folgende Vorgehensweise verwenden können:

Falcon API-Code:

import falcon 
import base64 
import json 

app = falcon.API() 
app.add_route("/rec/", GetImage()) 

class GetImage: 

    def on_post(self, req, res): 

     json_data = json.loads(req.stream.read().decode('utf8')) 
     image_url = json_data['image_name'] 
     base64encoded_image = json_data['image_data'] 
     with open(image_url, "wb") as fh: 
      fh.write(base64.b64decode(base64encoded_image)) 

     res.status = falcon.HTTP_203 
     res.body = json.dumps({'status': 1, 'message': 'success'}) 

Für API-Aufruf:

import requests 
import base64 

with open("yourfile.png", "rb") as image_file: 
    encoded_image = base64.b64encode(image_file.read()) 

r = requests.post("http://localhost:8000/rec/", 
        data={'image_name':'yourfile.png', 
         'image_data':encoded_image 
         } 
       ) 
print(r.status_code, r.reason) 

Ich hoffe, dass dies dazu beitragen wird.

+0

Wenn Sie json.loads zum Empfangen der Daten verwenden, müssen Sie json.dumps verwenden, um sie zu senden –

Verwandte Themen