Guten Nachmittag,
Ich habe an einer rekursiven Schleife gearbeitet, die es mir ermöglicht, einige Elemente in einer Bibliothek zu finden und herunterzuladen.
Bisher habe ich alle Elemente erhalten, kann sie aber nicht herunterladen, da in den Eigenschaften des Elements das Feld "Name" nicht auftaucht.
Wenn ich das Element in eine Datei umwandele, sind die Eigenschaften null ({}), sodass ich den Namen nicht abrufen kann.
Da die Methode file.dowload() eine Datei erfordert und ich die aktuelle Erweiterung der Datei nicht kenne, ist es ziemlich unmöglich, die Datei herunterzuladen.
Irgendwelche Vorschläge?
Der Code den ich verwende ist folgender:
from office365.runtime.auth.ClientCredential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
from office365.sharepoint.camlQuery import CamlQuery
ctx = ClientContext.connect_with_credentials(site_url, ClientCredential(client_id, client_secret))
lib = ctx.web.lists.get_by_title("XXX")
caml_query = CamlQuery()
caml_query.ViewXml = """XXX"""
items = lib.get_items(caml_query)
ctx.load(lib)
ctx.execute_query()
for item in items:
file = item.file
with open(download_path, "wb") as local_file:
file.download(local_file)
ctx.execute_query()
print("[Ok] file has been downloaded: {0}".format(download_path))
Danke im Voraus!
Guten Morgen,
Ich konnte mein Problem lösen.
Nach dem Durchlaufen der Artikelliste müssen Sie den Kontext für jede Datei aufrufen, um die Eigenschaften der Datei einschließlich des Namens abzurufen, dann können Sie die Datei herunterladen.
Das ist mein Code unten:
client_id = "XXX"
client_secret = "XXX"
site_url = "XXX"
download_folder = r'C:\Users\yourname\sharepoint'
from office365.runtime.auth.ClientCredential import ClientCredential
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.file import File
from office365.sharepoint.camlQuery import CamlQuery
ctx = ClientContext.connect_with_credentials(site_url, ClientCredential(client_id, client_secret))
lib = ctx.web.lists.get_by_title("REO")
caml_query = CamlQuery()
caml_query.ViewXml = XXX
items = lib.get_items(caml_query)
ctx.load(items)
ctx.execute_query()
for item in items:
file = item.file
ctx.load(file)
ctx.execute_query()
file_name = "{0}".format(file.properties["Name"])
download_path = download_folder + '//' + file_name
with open(download_path, "wb") as local_file:
file.download(local_file)
ctx.execute_query()
print("[Ok] file has been downloaded: {0}".format(download_path))
@pobs93 Ich versuche, Ihren Quellcode zu verwenden, um Anhänge von einer Sharepoint-Liste herunterzuladen.
Ich habe diese Zeile hier kommentiert, da ich nicht weiß, welche Parameter ich dafür verwenden soll:
caml_query.ViewXml = XXX
Aber wenn ich den Code ausführe, erhalte ich die folgende Fehlermeldung in Zeile ctx.execute_query()
TypeError: Objekt vom Typ CamlQuery ist nicht JSON-serialisierbar
Ich bin neu bei dieser Art von API, also habe ich mich gefragt, ob Sie das klären könnten.
TKS
@ pobs93 Nur um eine Erklärung zu der Liste hinzuzufügen, von der ich versuche, Anhänge herunterzuladen.
Das sind die DEFAULT-Schlüssel aus der Liste, die ich habe, und ich sehe die URL des Anhangs hier nicht, aber sie sind da (siehe Bild im Anhang).
{'Dateisystemobjekttyp': -,
'Ausweis': -,
'ServerRedirectedEmbedUri': Keine,
'ServerRedirectedEmbedUrl': '',
'ContentTypeId': -,
'Titel': -,
'ComplianceAssetId': Keine,
'ICH WÜRDE': -,
'Geändert': -,
'Erstellt': -,
'AutorId': 12,
'EditorId': 12,
'OData__UIVersionString': '1.0',
'Anhänge': Stimmt,
'GUID': -}
Das folgende Beispiel zeigt, wie Sie _Dateiname_ und _Datei-URL_ für Listenelement abrufen:
ctx = ClientContext(settings['url']).with_credentials(client_creds)
lib = ctx.web.lists.get_by_title("Documents")
items = lib.items
ctx.load(items, ["ID", "FileLeafRef", "FileRef"])
ctx.execute_query()
for item in items:
print(f"FileRef: {item.properties['FileRef']}")
wo
FileLeafRef
- Identifiziert ein Feld, das Informationen über die serverrelative URL für den Dateiknoten enthält, der mit ListItem verknüpft ist
FileRef
- Identifiziert ein Feld, das Informationen über die serverrelative URL für ListItem enthält
Hilfreichster Kommentar
Guten Morgen,
Ich konnte mein Problem lösen.
Nach dem Durchlaufen der Artikelliste müssen Sie den Kontext für jede Datei aufrufen, um die Eigenschaften der Datei einschließlich des Namens abzurufen, dann können Sie die Datei herunterladen.
Das ist mein Code unten: