es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Manejo o acceso de archivo en el RequestHandler subido en la solicitud POST.

A través de una solicitud POST de Postman estoy enviando datos de formulario multiparte con parámetros junto con archivos adjuntos. Ahora, en el backend, estoy utilizando Tornado para manejar estas solicitudes, no tengo problemas para acceder a los parámetros usando RequestHandler.get_argument(“str”) (1er hipervínculo para la captura de pantalla de Postman) sin embargo, estoy teniendo dificultades para acceder / leer el archivo adjunto que llega a través de la misma solicitud. Según la documentación de Tornado, estaba usando RequestHandler.get_body_argument y .get_body_arguments pero ambos parecen no funcionar. No estoy seguro si me falta algo aquí en mi backend. ¿Alguien puede ayudar aquí?

Fragmento de código en el backend:

dic = {}
dic[‘operation’] = RequestHandler.get_argument(self, name=”operation”). << este es el parámetro en la solicitud POST de Postman y puedo obtener el valor de la clave “operation” sin ningún problema

Captura de pantalla de Postman mostrando que el acceso a los parámetros dentro de la misma solicitud no tiene problemas:

Imagen 1: https://i.stack.imgur.com/pKsqd.png

Captura de pantalla de Postman mostrando la solicitud POST con datos de formulario y archivo:

Imagen 2: https://i.stack.imgur.com/mUk6Z.png

Pero acceder al archivo del formulario en el backend usando Tornado como se muestra en la captura de pantalla anterior (2º hipervínculo a la captura de pantalla) se ha convertido en una lucha.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para acceder a los archivos adjuntos en una solicitud POST desde Postman usando Tornado, se debe utilizar el método RequestHandler.get_file_arguments en lugar de RequestHandler.get_body_argument o RequestHandler.get_body_arguments.

    Aquí hay un ejemplo de cómo usarlo en el backend:

    dic = {}
    dic['operation'] = self.get_argument("operation")   # acceder al parámetro normalmente
    
    file_dict = self.request.files  # obtener un diccionario de archivos adjuntos
    for field_name, files in file_dict.items():
        for file in files:
            # acceder a las propiedades del archivo, como el nombre de archivo, el cuerpo, etc.
            filename = file['filename']
            filebody = file['body']
    

    self.request.files devuelve un diccionario donde las llaves son los nombres de campo de los archivos adjuntos y los valores son una lista de archivos para ese campo. Cada archivo es un diccionario que contiene propiedades como filename, content_type y body.

    Al iterar sobre file_dict, se puede acceder a cada archivo y sus propiedades. En el ejemplo anterior, simplemente estamos imprimiendo el nombre de archivo y el cuerpo de cada archivo adjunto.

    El uso del método self.get_argument todavía funciona normalmente para acceder a los parámetros en la misma solicitud POST desde Postman.

Comments are closed.