Python - Subir archivos a un servidor html con python cgi

 
Vista:
Imágen de perfil de Sarai

Subir archivos a un servidor html con python cgi

Publicado por Sarai (1 intervención) el 10/04/2018 09:24:42
Hola! Soy una estudiante de bioinformática y estoy teniendo un problema para subir un archivo desde un script html al servidor para procesarlo con un scrip cgi python. He intentado utilizar diferentes scripts que he encontrado en internet pero no consigo hacer lo que quiero.

Este es un fragmento del script HTML para subir el archivo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 
<BR>
<CENTER><FORM ACTION="blast_parser.cgi" METHOD="POST" ENCTYPE="multipart/form-data">
 
<FONT SIZE=+1>Upload your sequence(s) file</FONT>
 
<BR><INPUT TYPE="file"  NAME= "file" ID="file">
<BR>
<BR>
<INPUT TYPE="submit" VALUE="BLAST!" NAME="submit" ID="submit">
<input type="reset" value="Clear Form"><br>
<BR>
<BR>

Y este es un fragmento del archivo blast_parser.cgi para procesar ese archivo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cgi, os
import cgitb; cgitb.enable()
import glob, subprocess, shlex, sys, re
 
try: # Windows needs stdio set for binary mode.
    import msvcrt
    msvcrt.setmode (0, os.O_BINARY) # stdin  = 0
    msvcrt.setmode (1, os.O_BINARY) # stdout = 1
except ImportError:
    pass
 
def fbuffer(f, chunk_size=10000):
    while True:
        chunk = f.read(chunk_size)
        if not chunk: break
        yield chunk
 
form = cgi.FieldStorage()
fileitem = form['file']
 
if fileitem.filename:
    fn = os.path.basename(fileitem.filename)
    f = open('/opt/lampp/htdocs/server_v1/uploads/' + fn, 'wb', 10000)
    for chunk in fbuffer(fileitem.file):
        f.write(chunk)
    f.close()
    message = 'The file "' + fn + '" was uploaded successfully'
else:
    message = 'No file was uploaded'
 
print """\
Content-Type: text/html\n
<html><body>
<p>%s</p>
</body></html>
    """ % (message,)

El output de este script es: "No file was uploaded". El problema es que el test if fileitem.filename: es None siempre, porque fileitem es MiniFieldStorage('file', 'Acinetobacter_pittii_protein.faa'), porque yo estoy subiendo un archivo llamado Acinetobacter_pittii_protein.faa

Lo que quiero es subir el archivo al servidor para poder procesarlo, pero no me lo captura por lo que parece. No he subido el resto del código porque es muy largo, pero si alguien lo necesita para ayudarme que me lo pida. Agradezco todo tipo de ayuda! Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2
Ha disminuido su posición en 19 puestos en Python (en relación al último mes)
Gráfica de Python

Subir archivos a un servidor html con python cgi

Publicado por Allan (1 intervención) el 22/11/2018 16:29:45
Algo me dice que jose islas es tu maestro, lograste tu cometido?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar