Selamat siang,
Saya telah mengerjakan loop rekursif yang memungkinkan saya menemukan beberapa item di perpustakaan dan mengunduhnya.
Sejauh ini saya sudah bisa mendapatkan semua elemen tetapi saya tidak dapat mengunduhnya karena di properti elemen bidang "Nama" tidak muncul.
Saat saya mengonversi elemen menjadi file, propertinya adalah null ({}) jadi saya tidak bisa mendapatkan namanya.
Karena file.dowload() methot memerlukan file dan saya tidak tahu ekstensi file saat ini, sangat tidak mungkin untuk mengunduh file.
Ada saran?
Kode yang saya gunakan adalah sebagai berikut:
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))
Terima kasih sebelumnya!
Selamat pagi,
Saya mampu memecahkan masalah saya.
Setelah iter di dalam daftar item, Anda perlu memanggil konteks untuk setiap file, itu akan mengambil properti file yang menyertakan nama, kemudian Anda dapat mengunduh file.
Ini kode saya di bawah ini:
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 Saya mencoba menggunakan kode sumber Anda untuk mengunduh lampiran dari daftar Sharepoint.
Saya mengomentari baris ini di sini karena saya tidak tahu parameter apa yang digunakan untuk itu:
caml_query.ViewXml = XXX
Tetapi ketika saya menjalankan kode saya mendapatkan kesalahan di bawah ini pada baris ctx.execute_query()
TypeError: Objek bertipe CamlQuery tidak dapat serial JSON
Saya baru mengenal jenis API ini, jadi saya ingin tahu apakah Anda bisa mengklarifikasi.
TKS
@ pobs93 Hanya untuk menambahkan beberapa penjelasan tentang daftar yang saya coba unduh lampirannya.
Itu adalah kunci DEFAULT dari daftar yang saya miliki dan saya tidak melihat URL lampiran di sini, tetapi ada di sana (lihat gambar terlampir).
{'FileSystemObjectType': -,
'Indo': -,
'ServerRedirectedEmbedUri': Tidak ada,
'ServerRedirectedEmbedUrl': '',
'ContentTypeId': -,
'Judul': -,
'ComplianceAssetId': Tidak ada,
'INDO': -,
'Diubah': -,
'Dibuat': -,
'Id Penulis': 12,
'Id Editor': 12,
'OData__UIVersionString': '1.0',
'Lampiran': Benar,
'PANDUAN': -}
Contoh berikut menunjukkan cara mengambil _file name_ dan _file url_ untuk item daftar:
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']}")
di mana
FileLeafRef
- Mengidentifikasi bidang yang berisi informasi tentang URL relatif server untuk node file yang terkait dengan ListItem
FileRef
- Mengidentifikasi bidang yang berisi informasi tentang URL relatif server untuk ListItem
Komentar yang paling membantu
Selamat pagi,
Saya mampu memecahkan masalah saya.
Setelah iter di dalam daftar item, Anda perlu memanggil konteks untuk setiap file, itu akan mengambil properti file yang menyertakan nama, kemudian Anda dapat mengunduh file.
Ini kode saya di bawah ini: