首页 > 解决方案 > 使用 powershell 将大文件上传到共享点库子文件夹

问题描述

我正在使用 PowerShell 将多个文件上传到 SharePoint 库子文件夹。

使用下面的链接/代码,我只能将文件上传到根目录,但不能上传到子文件夹。

如何将其上传到库子文件夹?其他一切工作正常。

https://www.sharepointsky.com/upload-large-files-to-sharepoint-online-document-library-using-powershell-csom/

标签: powershellsharepointsharepoint-2013

解决方案


李给你的是在正确的轨道上杰克。您可以做一些事情,并且想要改变。

首先 - 由于您使用的是相对 URL,因此将其作为参数添加到函数中。这是您的文档库名称之后的 URL 部分(即 /sub-folder/sub-folder):

 Function UploadFileInSlice ($ctx, $libraryName, $fileName, $FolderRelativeURL)

然后 - 创建一个变量来构造您的目标 URL(记住替换空格,并删除逗号:

$targetURL = "/sites/dev/$($libraryName.Replace(',','').Replace(' ','%20'))$($FolderRelativeURL.Replace(' ','%20'))"

下一步 - 由于您使用的是相对 URL,因此无需加载根文件夹。您仍然可以使用其相对 URL 上传到它。但是,您将希望您的上下文在以后知道目标文件夹。所以在函数开始之前,你只需要这 4 行来设置你的上下文:

$web = $ctx.web
$folder = $web.GetFolderByServerRelativeUrl($targetURL)
$ctx.Load($folder)
$ctx.ExecuteQuery()

Lee 在“常规方法”中提供的位对于小于块大小的文件可以正常工作,但在大文件部分,您希望使用该 $upload 对象。您需要该对象才能让其余代码上传切片。与您的原始资料和李的回答相比,这应该看起来很熟悉:

$Upload = $folder.Files.Add($fileInfo)

最后 - 在第一个切片(空文件)上传后,您需要更改 $upload 对象的引用。原始代码仍在查看文件的根目录。您必须将其定向到您的相对 URL。由于您之前将文件夹加载到上下文中,因此您可以检索所需的属性(在本例中,您将获得其 ServerRelativeUrl):

$Upload = $ctx.Web.GetFileByServerRelativeUrl($folder.ServerRelativeUrl + [System.IO.Path]::AltDirectorySeparatorChar + $UniqueFileName);

我有构建 2 个不同 URL 的脚本的原因是因为 $web.GetFolderByServerRelativeUrl 想要一个 Web URL(这意味着 %20 而不是空格且没有逗号),而 $ctx.Web.GetFileByServerRelativeUrl 想要一个直接 URL(可以有空格;它不喜欢其中包含 %20 的 URL)。您可能没有这个问题,并且可以跳过其中的一些代码。然而,我的用户对我并不友好,并且尽可能使用空间。

最后一点,您可能希望在“常规方法”部分的“返回”之前添加 $Filestream.dispose()。没有它,该文件将被锁定,直到脚本结束,如果需要,您以后无法访问/修改它。

我希望这能够帮到你。我也不得不在互联网上搜索如何将大文件上传到子目录中。


推荐阅读