Загрузите файл в папку Sharepoint, используя Python - PullRequest
1 голос
/ 05 мая 2020

У меня есть сценарий Python, который сохраняет файл в общую папку сервера для доступа пользователя. Наша организация недавно переместила файловую структуру нашего сервера в Sharepoint ... включая все папки. (Я прочитал несколько статей, это плохая идея, но сейчас ее нельзя изменить.)

У меня есть новый код, который загружает файл в папку root библиотеки Sharepoint:

import sharepy s = sharepy.connect ("site.sharepoint.com", "имя пользователя", "пароль") r = s.post ("https://site.sharepoint.com/_api/web/Lists/GetByTitle ('Документы') / RootFolder / files \ /add(overwrite=true,url='test.csv ') ", \" testing, foo, bar ") print (r)

Есть ли способ вместо этого загрузить файл во вложенную папку из root? Если да, то как?

Ответы [ 3 ]

2 голосов
/ 25 августа 2020

Некоторое время назад я работал над той же проблемой. Ниже мой код.

import requests
from shareplum import Office365

username = "YourUsername"
password = "YourPassword"
site_name = "Sitename"
doc_library = "SubfolderName"
base_path = "https://domainName.sharepoint.com"

file_name = "FileName"

# Obtain auth cookie
authcookie = Office365(base_path, username=username, password=password).GetCookies()
session = requests.Session()
session.cookies = authcookie
session.headers.update({'user-agent': 'python_bite/v1'})
session.headers.update({'accept': 'application/json;odata=verbose'})

# dirty workaround.... I'm getting the X-RequestDigest from the first failed call
session.headers.update({'X-RequestDigest': 'FormDigestValue'})
response = session.post( url=base_path + "/sites/" + site_name + "/_api/web/GetFolderByServerRelativeUrl('" + doc_library + "')/Files/add(url='a.txt',overwrite=true)",
                         data="")
session.headers.update({'X-RequestDigest': response.headers['X-RequestDigest']})

dest =  base_path + "/sites/" + site_name + "/_api/web/GetFolderByServerRelativeUrl('" + doc_library + "')/Files/add(url='a.txt',overwrite=true)" #session.post( url=base_path + "/sites/" + site_name + "/_api/web/GetFolderByServerRelativeUrl('" + doc_library + "')/Files/add(url='a.txt',overwrite=true)",data="")
print('Folder!')
# perform the actual upload
with open( file_name, 'rb') as file_input:
    try:
        print('uploading')
        response = session.post( 
            url=base_path + "/sites/" + site_name + "/_api/web/GetFolderByServerRelativeUrl('" + doc_library + "')/Files/add(url='" 
            + file_name + "',overwrite=true)",
            data=file_input)
    except Exception as err: 
        print("Some error occurred: " + str(err))
print('Uploaded successfully!')
1 голос
/ 07 мая 2020

Если это кому-то поможет, вот мой последний код. Он успешно отправляет файл на сайт sharepoint team site library subfolder . Замените курсив на вашу информацию.

import sharepy

s = sharepy.connect (" MySite .sharepoint.com", " username " , " пароль ")

r = s.post ("https: //MySite.sharepoint.com/sites/TeamSiteName/ _api / web / GetFolderByServerRelativeUrl ('/ sites / TeamSiteName / Shared Documents / FolderName ') / Files / "+" добавить (overwrite = true, url = 'test.csv') "," testing, foo, bar ")

print r

0 голосов
/ 05 мая 2020

Да, вы можете загружать файлы в подпапку через rest api. Используйте ссылку на следующие конечные точки:

А ниже приведены некоторые демонстрации того, как загружать файлы с помощью python (но они могут не использовать ту же библиотеку, что и ваша).

/////// Обновление ////// enter image description here

...