【问题标题】:Python upload files and folder to sharepointPython 将文件和文件夹上传到共享点
【发布时间】:2020-04-08 13:29:49
【问题描述】:

我正在尝试将一些文件(多个文件和文件夹)上传到共享点,当我运行脚本时我没有任何错误,但我无法在共享点中查看我的文件。

import requests
from shareplum import Office365

# get data from configuration
username = 'last.surname@tenant.com'
password = 'mypassword'
site_name = 'BI_odair'
base_path = 'https://tenant.sharepoint.com'
doc_library = 'data'

file_name = "links.txt"

# 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'})


# perform the actual upload
with open(file_name, 'rb') as file_input:
    try:
        response = session.post(
            url=base_path + "/sites/" + site_name +
            "/_api/web/GetFolderByServerRelativeUrl('Shared%20Documents/" +
            doc_library+"')/Files/add(url='"
            + file_name + "',overwrite=true)",
            data=file_input)
    except Exception as err:
        print("Some error occurred: " + str(err))

我的分享点网址:https://tenant.sharepoint.com/sites/BI_odair/Documents%20partages/Forms/AllItems.aspx?viewid=4e7fdfb9%2De84a%2D42cd%2Db537%2D0d2837ca92cc 已经有一个名为 Data 的文件夹,但我想将我的文件上传到根文件夹“/Documents%20partages”

我已经将此添加到我的代码中:https://stackoverflow.com/a/59083429/6754555

提前致谢。

【问题讨论】:

    标签: python-3.x file sharepoint file-upload


    【解决方案1】:

    这是对我来说完美的解决方案:

    pip install SharePlum 然后使用下面的代码

    import requests
    from shareplum import Office365
    
    # Set Login Info
    username = '<username>'
    password = '<password>'
    site_name = '<site_name>'
    base_path = 'https://<domain_name>.sharepoint.com'
    doc_library = 'Shared%20Documents'
    nested_folder = 'Shared%20Documents/<folder1>/<folder2>' #if you want to upload in nested folders else nested_folder = doc_library
    file_name = "my_file.zip" #when your file in the same directory
    
    # 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'})
    
    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']})
    
    # perform the actual upload
    with open(file_name, 'rb') as file_input:
        try:
            response = session.post(
                url=base_path + "/sites/" + site_name + f"/_api/web/GetFolderByServerRelativeUrl('" + nested_folder + "')/Files/add(url='"
                + file_name + "',overwrite=true)",
    
                data=file_input)
            print("response: ", response.status_code) #it returns 200
            if response.status_code == '200':
                print("File uploaded successfully")
        except Exception as err:
            print("Something went wrong: " + str(err))
    
    print('File Uploaded Successfully')
    

    【讨论】:

      【解决方案2】:

      “共享文档”是默认文档库。如果要上传文件到自定义库,请修改路径如下:

      response = session.post(
              url=base_path + "/sites/" + site_name +
              "/_api/web/GetFolderByServerRelativeUrl("Documents%20partages")/Files/add(url='"
              + file_name + "',overwrite=true)",
              data=file_input)
      

      你也可以看看下面的博客:Uploading files to SharePoint

      ////////更新了

      我创建了一个文档库并测试了上面博客中的演示,它运行良好。

      下面是我的代码:

      import requests
      from shareplum import Office365
      from config import config
      
      # get data from configuration
      username = config['sp_user']
      password = config['sp_password']
      site_name = config['sp_site_name']
      base_path = config['sp_base_path']
      doc_library = config['sp_doc_library']
      
      file_name = "test.csv"
      
      # 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']})
      
      # perform the actual upload
      with open( r'C:\Users\xxx\Documents\test.csv', 'rb+') as file_input:
          try: 
              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('end...')

      【讨论】:

      • 我更改了代码,我也不工作!当我打印响应时,我收到错误 403。这是根文件夹:tenant.sharepoint.com/sites/BI_odair/Documents%20partages/Forms/…
      • response = session.post( url=base_path + "/sites/" + site_name + "/_api/web/GetFolderByServerRelativeUrl("'Documents%20partages'")/Files/add(url='" + file_name + "',overwrite=true)", data=file_input) print("response: ", response)
      • 似乎url字符串没有正确连接。请在下面试试 url=base_path + "/sites/" + site_name + "/_api/web/GetFolderByServerRelativeUrl('Documents%20partages')/Files/add(url='" + file_name + "',overwrite=true) "
      • 当我运行脚本并打印响应时,我得到:response: &lt;Response [404]&gt;
      • Traceback (most recent call last): File "spupload.py", line 26, in &lt;module&gt; {'X-RequestDigest': response.headers['X-RequestDigest']}) File "C:\Users\odavaz\AppData\Local\Programs\Python\Python38-32\lib\site-packages\requests\structures.py", line 54, in __getitem__ return self._store[key.lower()][1] KeyError: 'x-requestdigest'
      猜你喜欢
      • 1970-01-01
      • 2012-12-25
      • 2011-01-18
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多