Node.js通过SharePoint REST API读取文档库.docx文件的问题
嘿,我来帮你解决这个问题!你遇到的docx返回PK!����...的内容其实不是乱码——docx本质是一个ZIP压缩包,直接调用$value接口拿到的是它的原始二进制数据,这是完全正常的。下面分情况给你讲Node.js里的具体实现方法:
1. 读取文本文件(如.txt)
对于纯文本文件,我们可以直接请求$value接口并指定接收文本格式,拿到的内容可以直接存入字符串变量:
const axios = require('axios'); async function readSharePointTextFile(siteUrl, filePath, authToken) { try { // 对文件路径进行URL编码,避免特殊字符导致请求失败 const encodedFilePath = encodeURIComponent(filePath); const response = await axios.get( `${siteUrl}/_api/web/GetFileByServerRelativeUrl('${encodedFilePath}')/$value`, { headers: { 'Authorization': `Bearer ${authToken}`, // 必须携带有效的访问令牌 'Accept': 'text/plain' // 指定接收纯文本格式 } } ); // response.data就是文本内容,直接存入变量 const fileContent = response.data; console.log('读取到的文本内容:', fileContent); return fileContent; } catch (error) { console.error('读取文本文件失败:', error.response?.data || error.message); throw error; } } // 使用示例 const siteUrl = 'https://你的SharePoint站点地址'; const txtFilePath = '/Shared Documents/s_C_locations.txt'; const authToken = '你的有效访问令牌'; // 需要提前获取OAuth令牌 readSharePointTextFile(siteUrl, txtFilePath, authToken);
2. 读取docx文件并处理
对于docx这类二进制文件,我们需要获取原始二进制数据(存入Buffer变量),如果需要可读文本,可以用第三方库(比如mammoth)解析:
步骤1:安装依赖
首先安装所需的包:
npm install axios mammoth
步骤2:实现代码
const axios = require('axios'); const mammoth = require('mammoth'); async function readSharePointDocxFile(siteUrl, filePath, authToken) { try { const encodedFilePath = encodeURIComponent(filePath); const response = await axios.get( `${siteUrl}/_api/web/GetFileByServerRelativeUrl('${encodedFilePath}')/$value`, { headers: { 'Authorization': `Bearer ${authToken}` }, responseType: 'arraybuffer' // 关键:指定接收二进制数组,Node.js中会自动转为Buffer } ); // response.data是Buffer类型,直接存入变量 const docxBuffer = response.data; console.log('docx文件二进制数据大小:', docxBuffer.length + '字节'); // 可选:将docx解析为纯文本 const parseResult = await mammoth.extractRawText({ buffer: docxBuffer }); const docxTextContent = parseResult.value; console.log('解析后的docx文本内容:', docxTextContent); // 返回二进制数据和解析后的文本,按需使用 return { docxBuffer, docxTextContent }; } catch (error) { console.error('读取docx文件失败:', error.response?.data || error.message); throw error; } } // 使用示例 const docxFilePath = '/Shared Documents/你的文档.docx'; readSharePointDocxFile(siteUrl, docxFilePath, authToken);
关于权限的注意事项
你需要提前获取有效的SharePoint访问令牌(Bearer Token),常见的获取方式包括:
- 通过Azure AD OAuth 2.0流程获取(适用于独立Node.js应用)
- 在SPFx应用中使用
context.authToken(适用于SharePoint框架开发)
内容的提问来源于stack exchange,提问作者Muthu Prasanth
相关产品推荐
相关产品推荐

