Ich habe eine Anforderung, bei der ich rekursiv alle Dateien vom Stammordner, Unterordner und Unterordner auf Nth herunterladen muss.
Wie kann ich vorgehen? Gibt es eine Methode zum Auflisten von Ordnern in einem bestimmten Ordner? Wie kann ich Ordner in der Stammdokumentbibliothek auflisten? @vgrem @Bachatero
Ich habe einen Link erhalten, der besagt, dass wir den gesamten Ordner- und Dateistrukturbaum mithilfe einer Abfrage abrufen.
Erste Antwort auf diesen Link: https://sharepoint.stackexchange.com/questions/159105/with-rest-recursively-retrieve-file-and-folder-directory-structure
Ich versuche, dies über den obigen Link mit Ihrer API zu replizieren: / _api / web / Lists / GetByTitle ('Dokumente') / Items? $ Select = FileLeafRef, FileRef
Aber wenn ich das mit folgendem Code versuche:
folder = ctx.web.lists.get_by_title('Documents')
folder = folder.get_items('$select=FileLeafRef,FileRef')
Es schlägt mit einem Fehler fehl: "'str' Objekt hat kein Attribut 'Payload'"
Was zu tun ist?
Hallo,
Sie können den Ansatz verwenden, proc aufzurufen, der sich selbst rekursiv aufruft, z.
def printAllContents (ctx, relativeUrl):
try:
libraryRoot = ctx.web.get_folder_by_server_relative_url(relativeUrl)
ctx.load(libraryRoot)
ctx.execute_query()
folders = libraryRoot.folders
ctx.load(folders)
ctx.execute_query()
for myfolder in folders:
print("Folder name: {0}".format(myfolder.properties["ServerRelativeUrl"]))
printAllContents(ctx, relativeUrl + '/' + myfolder.properties["Name"])
files = libraryRoot.files
ctx.load(files)
ctx.execute_query()
for myfile in files:
#print("File name: {0}".format(myfile.properties["Name"]))
print("File name: {0}".format(myfile.properties["ServerRelativeUrl"]))
except:
print('Problem printing out list of folders')
sys.exit(1)
m.
... Sie können dann beispielsweise jede Datei mit ServerRelativeUrl herunterladen, die ausgedruckt wird ...
Ich habe meine Anfrage hier gepostet: strukturierter.
Zu Ihrer Information: Der JSON dient nur zu Darstellungs- / Verständniszwecken.
Ich bin mir nicht sicher, worauf du hinaus willst. Ich denke, der Prozess, für den ich ein Beispiel aufgelistet habe, macht das einfach ... listet rekursiv alle Ordner / Unterordner und Dateien in diesen Ordnern und Unterordnern auf ...
Beispiel für das Herunterladen der Dateien, wenn Sie den Baum rekursiv durchgehen ...
outputDir = "d:\output"
def printAllContents(ctx, relativeUrl):
try:
libraryRoot = ctx.web.get_folder_by_server_relative_url(relativeUrl)
ctx.load(libraryRoot)
ctx.execute_query()
folders = libraryRoot.folders
ctx.load(folders)
ctx.execute_query()
for myfolder in folders:
#print("Folder name: {0}".format(myfolder.properties["Name"]))
print("Folder name: {0}".format(myfolder.properties["ServerRelativeUrl"]))
printAllContents(ctx, relativeUrl + '/' + myfolder.properties["Name"])
files = libraryRoot.files
ctx.load(files)
ctx.execute_query()
for myfile in files:
print("File name: {0}".format(myfile.properties["ServerRelativeUrl"]))
pathList = myfile.properties["ServerRelativeUrl"].split('/')
fileDest = outputDir + "/"+ pathList[-1]
downloadFile(ctx, fileDest, myfile.properties["ServerRelativeUrl"])
except:
print('Problem printing out list of folders')
sys.exit(1)
folder_list = []
def get_folder_relativeUrl(context, folder_relativeUrl):
libraryRoot = context.web.get_folder_by_server_relative_url(folder_relativeUrl)
folders = libraryRoot.folders
context.load(folders)
context.execute_query()
for cur_folder in folders:
folder_list.append(cur_folder.properties["ServerRelativeUrl"])
get_folder_relativeUrl(context, cur_folder.properties["ServerRelativeUrl"])
return folder_list
Auf diese Weise erhalten Sie die flache Liste, die den übergeordneten Ordner und den n-ten Unterordner enthält.
Dies ist jedoch in Bezug auf die Leistung langsamer.
Schöne Grüße,
Da diese Frage beantwortet wurde, schlage ich vor, sie zu schließen
Hilfreichster Kommentar
Auf diese Weise erhalten Sie die flache Liste, die den übergeordneten Ordner und den n-ten Unterordner enthält.
Dies ist jedoch in Bezug auf die Leistung langsamer.