简体   繁体   English

VBA 使用 REST 将文件上传到 SharePoint API(下载已在示例中实现)

[英]VBA upload of file to SharePoint using REST API (download already implemented in example)

I have implemented a Sharepoint API connect/authorize/download functionality in an Excel workbook using VBA - see my implementation snippet below:我已经使用 VBA 在 Excel 工作簿中实现了 Sharepoint API 连接/授权/下载功能 - 请参阅下面的实现片段:

base_url = "SP URL/_api/web/"
end_url = "GetFileByServerRelativeUrl('" & endpoint_url
url = base_url & end_url & filepath & "')/$value"
HttpRequest.Open "GET", url
HttpRequest.setRequestHeader "Authorization", "Bearer " & auth_token
HttpRequest.Send
sresult = HttpRequest.responseText
sObject = HttpRequest.responseBody
filepath = Replace(filepath, "%20", " ")
filestring = Replace(filestring, "%20", " ")
'MsgBox HttpRequest.Status
If HttpRequest.Status = 200 Then
    'MsgBox HttpRequest.responseBody
    Set MyStream = CreateObject("ADODB.Stream")
    MyStream.Open
    MyStream.Type = 1
    MyStream.Write HttpRequest.responseBody
    MyStream.SaveToFile filestring, 2
    MyStream.Close
Else
MsgBox HttpRequest.Status
MsgBox "Error - Connection to server failed"
End If

I am struggling with how to adapt this for an upload use case.我正在为如何针对上传用例调整它而苦苦挣扎。

From reading the SP API docs I can see that I need to adjust the url endpoint to /GetFolderByServerRelativeUrl('/Library Name/Folder Name')/Files/add(url='example.txt',overwrite=true)通过阅读 SP API 文档,我可以看到我需要将 url 端点调整为 /GetFolderByServerRelativeUrl('/Library Name/Folder Name')/Files/add(url='example.txt',overwrite=true)

I am however unsure on the adaptation of the HttpRequest part, is it as simple as changing the `HttpRequest.Open "GET", url' to 'HttpRequest.Open "SEND", url' and then alterating the below part?然而,我不确定 HttpRequest 部分的改编,是否像将 `HttpRequest.Open "GET", url' 更改为 'HttpRequest.Open "SEND", url' 然后更改以下部分一样简单?

Set MyStream = CreateObject("ADODB.Stream")
    MyStream.Open
    MyStream.Type = 1
    MyStream.Write HttpRequest.responseBody
    MyStream.SaveToFile filestring, 2
    MyStream.Close

I've been at this for a few hours now, have tried to rewrite the MyStream part of the script but I am really unfamiliar with constructing this type of upload request.我已经在这几个小时了,试图重写脚本的 MyStream 部分,但我真的不熟悉构建这种类型的上传请求。

Have attempted to write a SEND version of the function but am unclear on the full scope of changes I need to make.已尝试编写 function 的 SEND 版本,但不清楚我需要进行的完整更改 scope。

For upload use .LoadFromFile and then .read on the ADO stream.对于上传,请使用.LoadFromFile ,然后在 ADO .read上使用 .read。

' read  file as binary
    Dim ado As Object
    Set ado = CreateObject("ADODB.Stream")
    With ado
        .Type = 1 'binary
        .Open
        .LoadFromFile filepath & filename
        .Position = 0
    End With

    ' request
    Dim client As Object
    Set client = CreateObject("MSXML2.XMLHTTP.6.0")
    With client
        .Open "POST", Url, False
        .setRequestHeader "Authorization", "Bearer " & AUTH_TOKEN
        .send ado.read
        ado.Close
        
        Debug.Print .responseText
        If .Status = 200 Then '200 = OK
            MsgBox ("Upload completed successfully")
        Else
            MsgBox .Status & ": " & .statusText
        End If

    End With

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM