簡體   English   中英

使用REST API將文件上傳到SharePoint 2013

[英]File Upload to SharePoint 2013 using REST API

我已經寫了這段代碼

  $spSiteUrl = "http://mysharepoint/sites/site/web/"
  $cmd = "_api/web/lists/getbytitle('$docLib')/rootfolder/files/add(url='" + $file.Name + "', overwrite=true)"
  $digest = "got valid digest through code";
  $mediaType = new-object("System.Net.Http.Headers.MediaTypeWithQualityHeaderValue") "application/json"
  $handler = new-object("System.Net.Http.HttpClientHandler")
  $handler.UseDefaultCredentials= $true
  $client = New-Object("System.Net.Http.HttpClient") $handler        
  $client.BaseAddress = $spSiteUrl
  $client.DefaultRequestHeaders.Accept.Clear()    
  $client.DefaultRequestHeaders.Accept.Add($mediaType);
  $client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose")
  $content = $null
  $client.DefaultRequestHeaders.Add("X-HTTP-Method", "PUT")
  $client.DefaultRequestHeaders.Add("X-RequestDigest", $digest)
  $fileStream = [System.IO.File]::OpenRead($file.FullName)
  $streamContent = new-object ("System.Net.Http.StreamContent") $fileStream
  $task = $client.PostAsync($cmd, $streamContent)
  $response = $task.Result
  $content = $response.Content.ReadAsStringAsync().Result
  Write-Host $content
  $fileStream.Close()
  $fileStream.Dispose()
  $response = $response.EnsureSuccessStatusCode()
  $client.Dispose()

在這里,我已經有一個有效的摘要值,該值是通過對_api / contextinfo進行POST獲得的

但是當我執行此代碼時,我得到一個錯誤

{“ error”:{“ code”:“-2147024891,System.UnauthorizedAccessException”,“ message”:{“ lang”:“ en-US”,“ value”:“訪問被拒絕。您無權執行此操作操作或訪問此資源。“}}} _api / web / lists / getbytitle('test')/ rootfolder / files / add(url ='BaselineFinishTag_2014_06.log',overwrite = true)

在這里您可以看到我正在使用UseDefaultCredentials為true。 此代碼使用作為場管理員和網站集管理員的帳戶運行,並且對正在運行此代碼的網站具有完全所有權。

您能告訴我我在這段代碼中遺漏了什么,導致我得到UnAuthorizedException嗎?

從PowerShell中使用SharePoint 2013 REST API的文章介紹了如何在PowerShell中使用REST API執行CRUD操作。

以下函數演示了如何使用指定文章中的Invoke-RestSPO.ps1函數通過SharePoint 2013 REST上傳文件:

如何在PowerShell中使用REST API上傳文件

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
. ".\Invoke-RestSPO.ps1" #Load Invoke-RestSPO function

Function Upload-SPOFile(){

Param(
  [Parameter(Mandatory=$True)]
  [String]$WebUrl,

  [Parameter(Mandatory=$True)]
  [String]$UserName,

  [Parameter(Mandatory=$True)]
  [String]$Password, 

  [Parameter(Mandatory=$True)]
  [String]$FolderUrl,

  [Parameter(Mandatory=$True)]
  [System.IO.FileInfo]$FileInfo

)


   $Url = $WebUrl + "/_api/web/GetFolderByServerRelativeUrl('" + $FolderUrl + "')/Files/add(url='" + $FileInfo.Name + "',overwrite=true)"
   $FileContent = [System.IO.File]::ReadAllBytes($FileInfo.FullName)

   $contextInfo = Get-SPOContextInfo  $WebUrl $UserName $Password
   Invoke-RestSPO -Url $Url -Method Post -UserName $UserName -Password $Password -Body $FileContent  -RequestDigest $contextInfo.GetContextWebInformation.FormDigestValue
}



#Usage: upload file into SharePoint Online  
$UserName = "username@contoso.onmicrosoft.com"
$Password = Read-Host -Prompt "Enter the password"    
$WebUrl = "https://contoso.sharepoint.com/"
$FolderUrl = "/Shared Documents"
$UploadFileInfo = New-Object System.IO.FileInfo("C:\Users\user\Documents\SharePoint User Guide.docx")


Upload-SPOFile -WebUrl $WebUrl -UserName $UserName -Password $Password -FolderUrl $FolderUrl -FileInfo $UploadFileInfo

參考文獻

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM