如何在AWS EC2实例与Microsoft One Drive/SharePoint之间读写文件
可行性说明
首先明确:scp无法实现该需求,scp是基于SSH协议的文件传输工具,仅支持对接开启了SSH服务的远程主机,OneDrive/SharePoint本身不提供SSH接入能力,因此该方案不可行。
你可以通过微软官方的Microsoft Graph API(OneDrive相关接口属于Graph API的子集),或者开源的OneDrive命令行客户端在EC2上直接完成读写操作,无需经过本地设备。
具体实现方法
方法1:使用开源OneDrive命令行客户端(无代码方案,适合普通文件传输需求)
这是最简便的落地方式,无需自行开发即可直接完成文件的上传、下载、同步操作,步骤如下:
- 安装依赖和编译环境:根据EC2运行的Linux发行版安装对应依赖,以Debian/Ubuntu为例,执行命令:
sudo apt update && sudo apt install -y libsqlite3-dev libcurl4-openssl-dev git build-essential dlang
- 编译安装开源OneDrive命令行客户端:获取对应客户端源码后按指引编译安装即可,主流Linux发行版也有预编译的软件包可直接安装。
- 账号授权:首次执行
onedrive命令后,终端会输出授权提示,你在任意可访问网页的设备上完成微软账号授权后,将授权码粘贴回EC2终端即可完成绑定,全程不需要在本地同步任何文件。 - 常用操作命令:
- 上传EC2本地文件到OneDrive:
onedrive --upload /ec2/local/file/path /onedrive/target/path/ - 下载OneDrive文件到EC2本地:
onedrive --download /onedrive/file/path /ec2/save/path/ - 同步指定目录内容:
onedrive --synchronize --single-directory /onedrive/target/dir
- 上传EC2本地文件到OneDrive:
方法2:调用Microsoft Graph API实现(适合自定义开发、业务集成场景)
如果你需要将OneDrive读写能力集成到自有业务流程中,可以直接调用官方API实现,核心操作步骤如下:
- 前置准备:在微软Azure应用管理后台注册应用,获取应用ID、客户端密钥,配置OneDrive/SharePoint的读写权限,选择适配服务端无交互运行的授权模式即可。
- 获取访问凭证:调用认证接口获取Access Token,示例命令如下:
curl -X POST https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token \ --header "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "client_id={你的应用ID}" \ --data-urlencode "scope=https://graph.microsoft.com/.default" \ --data-urlencode "client_secret={你的客户端密钥}" \ --data-urlencode "grant_type=client_credentials"
返回结果中的access_token字段即为后续调用业务接口的授权凭证。
- 上传文件到OneDrive:小于4MB的文件可直接调用上传接口,示例命令如下,大于4MB的文件使用分片上传接口即可:
curl -X PUT https://graph.microsoft.com/v1.0/users/{你的用户ID}/drive/root:/{目标文件路径}:/content \ --header "Authorization: Bearer {你获取到的Access Token}" \ --header "Content-Type: {文件对应MIME类型}" \ --data-binary @/ec2/local/file/path
- 从OneDrive下载文件到EC2:示例命令如下:
curl https://graph.microsoft.com/v1.0/users/{你的用户ID}/drive/root:/{OneDrive上的文件路径}:/content \ --header "Authorization: Bearer {你获取到的Access Token}" \ --output /ec2/save/file/path
- 如果你需要操作SharePoint上的文件,仅需要将接口地址中的用户drive替换为对应SharePoint站点的drive地址即可,接口调用逻辑完全一致。
内容的提问来源于stack exchange,提问作者cassiopeia
相关产品推荐
相关产品推荐

