You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过SharePoint REST API使用Postman自动下载文件?调用API返回JSON未触发本地自动下载的问题求助

SharePoint REST API 下载CSV文件(Postman实现)

我来帮你梳理下解决思路哈——你当前调用的接口其实只是获取文件的元数据列表,并不是直接请求文件内容,所以自然不会自动下载到本地。下面一步步教你怎么实现下载:

1. 先搞懂当前接口的作用

你调用的 https://xyz.sharepoint.com/sites/YYYFILES/_api/Web/GetFolderByServerRelativeUrl('test_library/lib')/Files 这个接口,返回的是文件夹里所有文件的属性信息(比如文件名、路径、大小这些),并没有返回文件的实际内容。所以要下载文件,得基于这些元数据再发请求。

2. 单个CSV文件的下载步骤

从你拿到的JSON响应里,找到要下载的CSV文件对象,它里面有两个关键字段可以用来构造下载请求:

  • ServerRelativeUrl:文件的相对路径,比如 test_library/lib/xxx.csv
  • @odata.mediaEditLink:直接指向文件内容的API地址(这个更省心,直接用就行)

操作步骤:

  • 在Postman里新建一个GET请求,把URL改成:
    https://xyz.sharepoint.com/sites/YYYFILES/_api/Web/GetFileByServerRelativeUrl('{文件的ServerRelativeUrl}')/$value
    
    或者直接用@odata.mediaEditLink的完整值,比如https://xyz.sharepoint.com/sites/YYYFILES/_api/Web/GetFileByServerRelativeUrl('test_library/lib/xxx.csv')/$value
  • 把之前用的Access Token(Authorization: Bearer {你的token})加到请求头里
  • 发送请求后,Postman的响应面板会显示CSV的内容,此时点击面板右上角的「Save Response」按钮,选择保存为.csv格式,就能存到本地了。

3. 批量下载所有CSV文件(Postman脚本实现)

如果文件夹里有很多CSV,手动一个个下载太麻烦,可以用Postman的Test脚本配合Newman命令行工具实现批量下载:

步骤1:在获取文件列表的请求里加Test脚本

打开你原来调用文件列表的请求,切换到「Tests」标签,粘贴下面的脚本:

// 从响应中提取所有文件列表
const allFiles = pm.response.json().value;
// 筛选出后缀为.csv的文件
const csvFiles = allFiles.filter(file => file.Name.endsWith('.csv'));

// 遍历每个CSV文件,发送下载请求
csvFiles.forEach(file => {
    // 构造下载接口URL
    const downloadUrl = `https://xyz.sharepoint.com/sites/YYYFILES/_api/Web/GetFileByServerRelativeUrl('${file.ServerRelativeUrl}')/$value`;
    
    pm.sendRequest({
        url: downloadUrl,
        method: 'GET',
        header: {
            // 复用当前请求的Authorization头
            'Authorization': pm.request.headers.get('Authorization')
        },
        responseType: 'blob' // 指定返回二进制内容
    }, (err, res) => {
        if (!err) {
            // 注意:这段写文件的代码需要用Newman运行才能生效(Postman UI里不支持直接写本地文件)
            const fs = require('fs');
            // 把文件保存到当前目录,文件名用文件的原始名称
            fs.writeFileSync(`./${file.Name}`, res.stream);
            console.log(`✅ 已成功保存文件: ${file.Name}`);
        } else {
            console.error(`❌ 下载文件失败: ${file.Name},错误信息: ${err.message}`);
        }
    });
});

步骤2:用Newman运行脚本

因为Postman的UI环境不允许脚本直接写入本地文件,所以需要用Newman(Postman的命令行工具)来执行:

  1. 先安装Node.js,然后用npm安装Newman:npm install -g newman
  2. 把你的Postman集合和环境变量导出为JSON文件
  3. 在命令行里执行:
    newman run 你的集合文件名.json -e 你的环境变量文件名.json
    
    执行完成后,所有CSV文件就会自动保存到当前命令行所在的目录下。

一些注意事项

  • 确保你的Access Token有读取该文档库的权限,如果权限不够会返回403错误
  • 如果下载时返回的是乱码,可以在请求头里加上 Accept: application/octet-stream,强制返回二进制内容
  • 对于超大CSV文件,可能需要考虑分片下载,但一般普通CSV文件直接用上面的方法就足够了

内容的提问来源于stack exchange,提问作者Ram Kashyap

火山引擎 最新活动