
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:
Y este es un fragmento del archivo blast_parser.cgi para procesar ese archivo:
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!
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


0