2016-06-23 5 views
0

Ich benutze das Web2py-Framework. Ich habe txt eine Datei über SQLFORM hochgeladen und die Datei ist im "Upload-Ordner" gespeichert, jetzt muss ich diese TXT-Datei von der Steuerung lesen, was ist der Dateipfad, den ich in der in default.py definierten Funktion verwenden sollte ?Datei-Upload bei web2py

def readthefile(uploaded_file): 
    file = open(uploaded_file, "rb") 
    file.read() 
    .... 
+0

Anthony beantwortete diese Frage hier: http://StackOverflow.com/A/26973208/6479329 – chnselim

Antwort

0

Sie können eine Verknüpfung zwischen Anwendungsverzeichnis und Ordner hochladen, um den Pfad zur Datei zu erstellen. Tun Sie etwas wie folgt aus:

import os 

filepath = os.path.join(request.folder, 'uploads', uploaded_file_name) 
file = open(filepath, "rb") 

request.folder: das Anwendungsverzeichnis. Wenn beispielsweise die Anwendung "Willkommen" ist, wird request.folder auf den absoluten Pfad "/path/to/welcome" festgelegt. In Ihren Programmen sollten Sie immer diese Variable und die Funktion verwenden, um Pfade zu den Dateien zu erstellen, die Sie auf zugreifen müssen.

Lesen request.folder

+0

Dies wird funktionieren, aber zuerst müssen Sie den 'uploaded_file_name' abrufen. Außerdem gibt es einen einfacheren Weg, die Methode '.retrieve' des Felds zu verwenden, die auch den ursprünglichen Dateinamen zurückgibt (siehe [diese Antwort] (http://stackoverflow.com/a/38012530/440323)). – Anthony

+0

@Anthony danke! –

0

Der transformierte Name der hochgeladenen Datei im Upload-Bereich der Datenbank-Tabelle gespeichert ist, so dass Sie brauchen eine Möglichkeit, die bestimmten Datensatz abzufragen, die über die SQLFORM Vorlage eingefügt, um wurde Erhalte den Namen der gespeicherten Datei. Hier ist, wie es aussehen würde, vorausgesetzt, Sie die Datensatz-ID kennen:

stored_filename = db.mytable(record_id).my_upload_field 
original_filename, stream = db.mytable.my_upload_field.retrieve(stored_filename) 
stream.read() 

Wenn Sie einen Dateinamen in die .retrieve Methode eines Upload-Feld übergeben, wird ein Tupel zurückgeben den ursprünglichen Dateinamen sowie das offene Dateiobjekt enthält (im obigen Code stream genannt).