Office365-rest-python-client: كيفية استرجاع اسم الملف (مع الامتداد)؟

تم إنشاؤها على ١٧ يونيو ٢٠٢٠  ·  4تعليقات  ·  مصدر: vgrem/Office365-REST-Python-Client

مساء الخير،

لقد كنت أعمل على حلقة متكررة تسمح لي بالعثور على بعض العناصر في مكتبة وتنزيلها.

لقد تمكنت حتى الآن من الحصول على جميع العناصر ولكني غير قادر على تنزيلها لأنه في خصائص العنصر لا يظهر الحقل "الاسم".

عندما أقوم بتحويل العنصر إلى ملف ، تكون الخصائص خالية ({}) لذلك لا يمكنني الحصول على الاسم.

نظرًا لأن الملف 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))

شكرا لك مقدما!

question

التعليق الأكثر فائدة

صباح الخير،

لقد تمكنت من حل مشكلتي.

بعد التكرار داخل قائمة العناصر ، تحتاج إلى استدعاء سياق كل ملف ، حيث يقوم باسترداد خصائص الملف التي تتضمن الاسم ، ثم يمكنك تنزيل الملف.

هذا هو الكود الخاص بي أدناه:

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))

ال 4 كومينتر

صباح الخير،

لقد تمكنت من حل مشكلتي.

بعد التكرار داخل قائمة العناصر ، تحتاج إلى استدعاء سياق كل ملف ، حيث يقوم باسترداد خصائص الملف التي تتضمن الاسم ، ثم يمكنك تنزيل الملف.

هذا هو الكود الخاص بي أدناه:

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": -}

sp_attachment

يوضح المثال التالي كيفية استرداد _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 ذي الصلة بالخادم لعنصر القائمة

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات