Estimados estoy recibiendo eventos desde una cámara, esta información incluye un json y una imagen. Puedo obtener la información en json con el siguiente código:
@app.route(’/evento’, methods = [‘POST’])
def evento():
print (request.form.get(“faceCapture”))
pero no he podido obtener la imagen. Esta es la información que obtengo. Por favor su ayuda.
–boundary
Content-Disposition: form-data; name=“faceCapture”
Content-Type: application/json
Content-Length: 960
{ —informacion en json–}
–boundary
Content-Disposition: form-data
Content-Type: image/jpeg
Content-Length: 57882
Content-ID: faceImage
Buenas.
En flask te podes fijar si el archivo esta en la parte de requests.files.
Podes ver un ejemplo sobre este tema en la documentación de Flask: https://flask.palletsprojects.com/en/1.1.x/patterns/fileuploads/#uploading-files
Hola gracias por la respuesta. También estuve revisando requests.files, pero no llega nada.
Puede obtener información de la imagen a través de request.form.get(None)
pero este string no se como guardarlo ya que me da error al intenr guardarlo.
Revisando la información a través de wireshark veo lo siguiente:
Donde muestra que me están llegando 2 imágenes, pero sin nombre. viene a traves de Encapsulated multipart part: (image/jpeg)
Viendo el ejemplo de la documentación, el objeto es [request] (sin s final)(https://werkzeug.palletsprojects.com/en/1.0.x/wrappers/#werkzeug.wrappers.Requestt)
Por otro lado ¿probaste usando el ejemplo que está en la documentación pero modificado para tu caso de uso? Tomando el código que está en la doc:
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
# check if the post request has the file part
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
# if user does not select file, browser also
# submit an empty part without filename
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
En el código de ejemplo, filename = secure_filename( request.files['file'].filename)
debería contener el archivo que estás recibiendo.
Hola ssebastianj si probé es pero tampoco funciono. Al final lo conseguí capturando todo con request.stream.read() y después lo separe utilizando el boundary que viene definido en la información(–boundary\r\n). No creo que sea la manera mas elegante ni eficiente, pero funciono. El código quedo asi:
@app.route(’/evento’, methods = [‘POST’])
def evento():
data4 = request.stream.read()
### parametro limite entre informacion
boundary="–boundary\r\n".encode()
### extracion de imagen
imagen=data4.split(boundary)[2]
imagen=imagen.split("\r\n\r\n".encode())[1]
### extracion json
tipo=data4.split(boundary)[1]
tipo=tipo.split("\r\n\r\n".encode())[1]
listado=tipo.decode()
## usar uid para nombre
nombre=json.loads(listado)[‘uid’]
### guardar imagen e informacion
f = open(“informacion/”+str(nombre)+".jpg", “wb”)
f.write(imagen)
f.close()
g = open(“informacion/”+str(nombre)+".txt", “wb”)
g.write(tipo)
g.close()
return ‘Recibido’
app.run(host=‘0.0.0.0’, port= 8001)