مساء الخير،
لقد كنت أعمل على حلقة متكررة تسمح لي بالعثور على بعض العناصر في مكتبة وتنزيلها.
لقد تمكنت حتى الآن من الحصول على جميع العناصر ولكني غير قادر على تنزيلها لأنه في خصائص العنصر لا يظهر الحقل "الاسم".
عندما أقوم بتحويل العنصر إلى ملف ، تكون الخصائص خالية ({}) لذلك لا يمكنني الحصول على الاسم.
نظرًا لأن الملف file.dowload () يتطلب ملفًا ولا أعرف الامتداد الحالي للملف ، فمن المستحيل جدًا تنزيل الملف.
أي sugestions؟
الكود الذي أستخدمه هو كما يلي:
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))
شكرا لك مقدما!
صباح الخير،
لقد تمكنت من حل مشكلتي.
بعد التكرار داخل قائمة العناصر ، تحتاج إلى استدعاء سياق كل ملف ، حيث يقوم باسترداد خصائص الملف التي تتضمن الاسم ، ثم يمكنك تنزيل الملف.
هذا هو الكود الخاص بي أدناه:
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 أحاول استخدام الكود المصدري لتنزيل المرفقات من قائمة Sharepoint.
لقد علقت على هذا السطر هنا لأنني لا أعرف المعلمات التي يجب استخدامها فيه:
caml_query.ViewXml = XXX
ولكن عندما أقوم بتشغيل الكود ، أتلقى الخطأ أدناه في السطر ctx.execute_query()
TypeError: كائن من النوع CamlQuery غير قابل للتسلسل JSON
أنا جديد على هذا النوع من واجهة برمجة التطبيقات ، لذلك كنت أتساءل عما إذا كان بإمكانك التوضيح.
TKS
@ pobs93 فقط لإضافة بعض الشرح حول القائمة التي أحاول تنزيل المرفقات منها.
هذه هي المفاتيح الافتراضية من القائمة التي أمتلكها ولا أرى عنوان URL الخاص بالمرفق هنا ، لكنها موجودة (انظر الصورة المرفقة).
{'FileSystemObjectType': -،
'هوية شخصية': -،
"ServerRedirectedEmbedUri": لا شيء ،
'ServerRedirectedEmbedUrl': ''،
"ContentTypeId": -،
'عنوان': -،
"ComplianceAssetId": لا شيء ،
'هوية شخصية': -،
'المعدل': -،
'خلقت': -،
'AuthorId': 12 ،
"محرر التحرير": 12 ،
"OData__UIVersionString": "1.0" ،
"المرفقات": صحيح ،
"GUID": -}
يوضح المثال التالي كيفية استرداد _file name_ و _file url_ لعنصر القائمة:
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']}")
أين
FileLeafRef
- يحدد الحقل الذي يحتوي على معلومات حول عنوان URL النسبي للخادم لعقدة الملف المقترنة بعنصر القائمة
FileRef
- يحدد الحقل الذي يحتوي على معلومات حول عنوان URL ذي الصلة بالخادم لعنصر القائمة
التعليق الأكثر فائدة
صباح الخير،
لقد تمكنت من حل مشكلتي.
بعد التكرار داخل قائمة العناصر ، تحتاج إلى استدعاء سياق كل ملف ، حيث يقوم باسترداد خصائص الملف التي تتضمن الاسم ، ثم يمكنك تنزيل الملف.
هذا هو الكود الخاص بي أدناه: