如何使用.NET将Aspose Words生成的PDF保存到SharePoint文件夹
优先采用内存流对接SharePoint官方客户端SDK的实现方式,不需要落地本地临时文件,稳定性最高,具体实现如下:
前置准备
在项目中安装NuGet包Microsoft.SharePointOnline.CSOM,该组件为微软官方提供的SharePoint客户端操作工具,同时适配SharePoint Online和本地部署的SharePoint Server版本。
核心实现代码(无本地文件落地,推荐)
首先引入所需命名空间:
using Aspose.Words; using Microsoft.SharePoint.Client; using System.IO; using System.Security; using System.Net;
核心上传逻辑:
// 初始化已处理好内容的Aspose.Words文档对象,和你原有本地生成的文档加载逻辑一致 Document doc = new Document("你的源文档路径"); // 将PDF格式的文档直接写入内存流,不生成本地磁盘文件 using (MemoryStream pdfStream = new MemoryStream()) { doc.Save(pdfStream, SaveFormat.Pdf); // 必须重置流指针到起始位置,否则会上传0字节损坏文件 pdfStream.Position = 0; // 初始化SharePoint客户端上下文,参数替换为你的SharePoint站点根地址 using (ClientContext ctx = new ClientContext("https://你的SharePoint站点根URL")) { // 构造访问凭证 SecureString securePassword = new SecureString(); foreach (char c in "你的访问密码".ToCharArray()) { securePassword.AppendChar(c); } // SharePoint Online用下面这行认证 ctx.Credentials = new SharePointOnlineCredentials("你的访问用户名", securePassword); // 如果是本地部署的SharePoint Server,注释掉上面一行,用下面的域认证 // ctx.Credentials = new NetworkCredential("你的用户名", "你的密码", "你的AD域名"); // 获取目标文件夹实例,参数替换为目标文件夹的服务器相对路径 Folder targetFolder = ctx.Web.GetFolderByServerRelativeUrl("目标SharePoint文件夹服务器相对路径"); // 构造文件上传配置 FileCreationInformation uploadFileInfo = new FileCreationInformation { ContentStream = pdfStream, Url = "Myfile.pdf", // 保存到SharePoint的文件名 Overwrite = true // 存在同名文件时自动覆盖 }; // 执行上传 targetFolder.Files.Add(uploadFileInfo); ctx.ExecuteQuery(); } }
生成本地文件后再上传的实现
如果你需要同时在本地留存一份PDF备份,可以沿用你原来的本地保存逻辑,读取本地文件流后上传即可,仅需替换流相关的代码段:
// 原有本地保存逻辑,建议用Path.Combine拼接路径避免斜杠缺失问题 string localSaveFullPath = Path.Combine(savePath, "Myfile.pdf"); doc.Save(localSaveFullPath); // 读取本地PDF文件流上传,SharePoint上下文初始化、上传逻辑和上面的内存流方案完全一致 using (FileStream localPdfStream = new FileStream(localSaveFullPath, FileMode.Open)) { Folder targetFolder = ctx.Web.GetFolderByServerRelativeUrl("目标SharePoint文件夹服务器相对路径"); FileCreationInformation uploadFileInfo = new FileCreationInformation { ContentStream = localPdfStream, Url = "Myfile.pdf", Overwrite = true }; targetFolder.Files.Add(uploadFileInfo); ctx.ExecuteQuery(); }
常见踩坑说明
- 路径格式错误:
GetFolderByServerRelativeUrl要求传入服务器相对路径,不能带域名前缀。例如站点根地址为https://corp.sharepoint.com/sites/finance,目标文件夹为共享文档下的pdf目录,正确路径为/sites/finance/Shared Documents/pdf。 - 权限不足:确保使用的访问账号对目标文件夹具备写入权限,否则执行
ExecuteQuery时会抛出403访问拒绝错误。 - 不要直接保存到WebDAV网络路径:直接把SharePoint的网络共享路径传给
doc.Save()的方式依赖本地WebClient服务配置,容易出现认证失败、文件锁死问题,稳定性极差,不推荐使用。
内容的提问来源于stack exchange,提问作者Suprateem Bose
相关产品推荐
相关产品推荐

