[Python-es] Como extraigo los datos de un "<input type='file'....>"

Gerardo Juárez gerardojuarez en buyteknet.info
Mar Sep 17 18:32:41 CEST 2013


On 09/17/2013 07:23 AM, Horacio wrote:
> Holas... Por medio del siguiente código html quiero enviar un archivo
> ascii que es elegido por el usuario, para para que sea procesado por
> una cgi escrita en python...
>
> <form action="/cgi-bin/procesar.cgi" method="post"
> enctype="multipart/from-data">
> selecione archivo a analizar:
> <input type="file" name="datos">
> </form>
>
> entonces acá la pregunta... en el archivo "procesar.cgi" como
> decodifico los datos luego de hacer...
>
> import cgi
> ...
> form=cgi.FieldStorage()
> ...
>
> form["datos"] que contiene? como extraigo el ascii del metodo post? o
> si alguien me indica como solucionar esto que debe ser algo comun,
> pero que desconozco como buscar para reloverlo, ejemplos de codigo son
> bienvenidos...
>
> Saludos...
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/

Con el atributo file obtienes un objeto tipo file de Python, el cual 
puedes leer. Por ejemplo:

finp = form["datos"].file
while 1:
       chunk = finp.read(blksize)
       if not chunk: break
       fout.write(chunk)

Donde fout es donde vas a copiar la información del archivo origen y es 
el tamaño del
buffer en el que quieres leer. (Otro atributo, form["datos"].filename, 
te da el nombre del
archivo).

Al recibirlo y almacenarlo, hay que tomar en cuenta si es binario o no, 
según la plataforma,
que los archivos de Windows pueden o no traer \ en vez de / y si en un 
sitio web, los permisos para que
pueda el script crear en algún lado el archivo o una base de datos, etc.

Gerardo







Más información sobre la lista de distribución Python-es