"If ext not in" damit Überprüfe ich zumindest vom Dateinamen das Format der Datei und lasse nicht zu, dass außer fastq-Dateien Dateien hochgeladen werden. Stimmt das nicht?
Den selbstgebastelten new_key behalte ich fürs erste (kann man ja später noch rel. einfach abändern).
Ich habe es sogar schon geschafft eine beispielhafte Plotgrafik einzubinden. Somit stehen mir hoffentlich keine allzu großen Hürden im Weg. Ich werde mich nun der Ausarbeitung des eigentlichen Inhalts zuwenden.
Ich muss es einfach nochmal loswerden: Dieses Forum ist absolut spitze und die Helfer einfach fantastisch. Ich fand die schrittweise Heranführung an die Lösung sehr amüsant und vor allem äußerst hilfreich. An dieser Stelle ein großes Lob und Dankeschön für eure Geduld.
P.S.
Anders habe ich es leider nicht hinbekommen. Ich war schon glücklich, dass es so funktioniert hat ^^ .Sirius3 hat geschrieben: Normalerweise hat man nur eine Route zu den statischen Dateien und nicht eine pro Dateityp.
Hier nochmal der verbesserte Code:
Code: Alles auswählen
@route('/upload', method='POST')
def do_upload():
new_key=''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(8))
upload = request.files.get('upload')
name, ext = os.path.splitext(upload.filename)
if ext not in ('.fastq'):
return 'File extension not allowed.'
save_path = '/tmp/fastq_prog'
if not os.path.exists(save_path):
os.makedirs(save_path)
file_path = "{path}/{file}".format(path=save_path, file=new_key)
upload.save(file_path, overwrite=True)
return template('upload', new_key=new_key)
@route('/analyse', method='POST')
def analyse():
key = request.forms.get('new_key')
filename = open(os.path.join('/tmp/fastq_prog/',key), 'r')
count = 0
for rec in SeqIO.parse(filename, 'fastq'):
count += 1
#plot 1
plt.ioff() # turn of interactive plotting mode
x = [1,2,3]
y = [5,7,4]
x2 = [1,2,3]
y2 = [14,10,12]
plt.plot(x,y, label='first Line')
plt.plot(x2,y2, label='second Line')
plt.xlabel('Plot Number')
plt.ylabel('Important var')
plt.legend()
plt.title('Interesting Graph\nSubtitle')
plt.savefig('static/sonstige-bilder/plot1.png', bbox_inches='tight')
return template('result1', count=count)
Code: Alles auswählen
<form action="/analyse" method="post" enctype="multipart/form-data">
<input type='hidden' name='new_key' value='{{new_key}}'/>
<p><input value='Analyse' type="submit" name='analyse' /></p>
</form>