$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL) $pass = ConvertTo-SecureString $credentials.Password -AsPlainText -Force $Creds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($credentials.UserName,$pass) $Context.Credentials = $Creds #Retrieve list $List = $Context.Web.Lists.GetByTitle($DocLibName) $Context.Load($List) $Context.ExecuteQuery() $filename = $File.Name $Url = $SiteUrl + "/_api/web/lists/getbytitle('$DocLibName')/rootfolder/files/add(url='" + $file.Name + "', overwrite=true)" $FileContent = [System.IO.File]::ReadAllBytes($File.FullName) Invoke-RestSPO -url $Url -method "Post" -Username $credentials.UserName -Password $pass -Body $FileContent -RequestDigest $context.GetContextWebInformation.FormDigestValue Add-Type –Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type –Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"<# .Synopsis Sends an HTTP or HTTPS request to a SharePoint Online REST-compliant web service. .DESCRIPTION This function sends an HTTP or HTTPS request to a Representational State Transfer (REST)-compliant ("RESTful") SharePoint Online web service. .EXAMPLE Invoke-SPORestMethod -Url "https://contoso.sharepoint.com/_api/web" .EXAMPLE Invoke-SPORestMethod -Url "https://contoso.sharepoint.com/_api/contextinfo" -Method "Post" #> Function Invoke-RestSPO(){ Param( [Parameter(Mandatory=$True)] [String]$Url, [Parameter(Mandatory=$False)] [Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get, [Parameter(Mandatory=$True)] [String]$UserName, [Parameter(Mandatory=$False)] [String]$Password, [Parameter(Mandatory=$False)] [String]$Metadata, [Parameter(Mandatory=$False)] [System.Byte[]]$Body, [Parameter(Mandatory=$False)] [String]$RequestDigest, [Parameter(Mandatory=$False)] [String]$ETag, [Parameter(Mandatory=$False)] [String]$XHTTPMethod, [Parameter(Mandatory=$False)] [System.String]$Accept = "application/json;odata=verbose", [Parameter(Mandatory=$False)] [String]$ContentType = "application/json;odata=verbose", [Parameter(Mandatory=$False)] [Boolean]$BinaryStringResponseBody = $False ) if([string]::IsNullOrEmpty($Password)) { $SecurePassword = Read-Host -Prompt "Enter the password" -AsSecureString } else { $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force } $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $SecurePassword) $request = [System.Net.WebRequest]::Create($Url) $request.Credentials = $credentials $request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") $request.ContentType = $ContentType $request.Accept = $Accept $request.Method=$Method if($RequestDigest) { $request.Headers.Add("X-RequestDigest", $RequestDigest) } if($ETag) { $request.Headers.Add("If-Match", $ETag) } if($XHTTPMethod) { $request.Headers.Add("X-HTTP-Method", $XHTTPMethod) } if($Metadata -or $Body) { if($Metadata) { $Body = [byte[]][char[]]$Metadata } $request.ContentLength = $Body.Length $stream = $request.GetRequestStream() $stream.Write($Body, 0, $Body.Length) } else { $request.ContentLength = 0 } #Process Response $response = $request.GetResponse() try { if($BinaryStringResponseBody -eq $False) { $streamReader = New-Object System.IO.StreamReader $response.GetResponseStream() try { $data=$streamReader.ReadToEnd() $results = $data | ConvertFrom-Json $results.d } finally { $streamReader.Dispose() } } else { $dataStream = New-Object System.IO.MemoryStream try { Stream-CopyTo -Source $response.GetResponseStream() -Destination $dataStream $dataStream.ToArray() } finally { $dataStream.Dispose() } } } finally { $response.Dispose() } } # Get Context Info Function Get-SPOContextInfo(){ Param( [Parameter(Mandatory=$True)] [String]$WebUrl, [Parameter(Mandatory=$True)] [String]$UserName, [Parameter(Mandatory=$False)] [String]$Password ) $Url = $WebUrl + "/_api/contextinfo" Invoke-RestSPO $Url Post $UserName $Password } Function Stream-CopyTo([System.IO.Stream]$Source, [System.IO.Stream]$Destination) { $buffer = New-Object Byte[] 8192 $bytesRead = 0 while (($bytesRead = $Source.Read($buffer, 0, $buffer.Length)) -gt 0) { $Destination.Write($buffer, 0, $bytesRead) } }
I am trying to upload a file with REST as for some reason it gets timed out after 3 minutes using
$FileStream =New-Object IO.FileStream($File.FullName,[System.IO.FileMode]::Open)
$FileCreationInfo =New-ObjectMicrosoft.SharePoint.Client.FileCreationInformation
$FileCreationInfo.Overwrite= $true
$FileCreationInfo.ContentStream= $FileStream
$FileCreationInfo.URL = $File
$Upload = $DestinationFolder.Files.Add($FileCreationInfo)
$Context.Load($Upload)
$Context.ExecuteQuery()
But when I run my script I get the error Array dimensions exceeded supported range. What is wrong with what I am doing? and will rest work for uploading files greater than 2MB? the rest script is the one at the top