对大文件使用 httr + graph API
Using httr + graph API for large files
我正在尝试使用 Microsoft Graph API 通过 R 直接将大文件上传到 SharePoint Online。为此,我正在使用 API 的 createUploadSession
、文档 here。
我的代码如下所示:
httr::PUT(url = "https://graph.microsoft.com/v1.0/sites/.../createUploadSession",
headers = add_headers(.headers = headers),
body = httr::upload_file(file),
encode = mime::guess_type(file),
verbose())
(其中 'headers' 包括身份验证和主机名,此处 graph.microsoft.com
)
结果请求如下所示:
-> PUT /v1.0/sites/.../createUploadSession HTTP/1.1
-> Host: graph.microsoft.com
-> User-Agent: libcurl/7.64.1 r-curl/4.3 httr/1.4.2
-> Accept-Encoding: deflate, gzip
-> Accept: application/json, text/xml, application/xml, */*
-> Content-Type: text/plain
-> Content-Length: 4543954542
当然,这失败了:
<- HTTP/1.1 413 Request Entity Too Large
<- Content-Type: text/html
<- Server: Microsoft-IIS/10.0
<- Strict-Transport-Security: max-age=31536000
<- Date: Fri, 02 Oct 2020 12:32:29 GMT
<- Connection: close
<- Content-Length: 67
<-
因为如文档所述,我们需要上传 327,680 字节的块。但是,我假设 httr
的 upload_file
允许流式传输。这就是我卡住的地方:看起来我的请求仍在尝试一次上传所有内容,那么我如何 'invoke' 这种流式传输行为?是否需要某种 while
循环才能继续发送下一个数据块?
此功能现已在 Microsoft365R 包中提供。完全披露:我是这个包的作者。
site <- get_sharepoint_site("sitename")
site$get_drive()$upload_file("path/to/file", "destfilename")
我正在尝试使用 Microsoft Graph API 通过 R 直接将大文件上传到 SharePoint Online。为此,我正在使用 API 的 createUploadSession
、文档 here。
我的代码如下所示:
httr::PUT(url = "https://graph.microsoft.com/v1.0/sites/.../createUploadSession",
headers = add_headers(.headers = headers),
body = httr::upload_file(file),
encode = mime::guess_type(file),
verbose())
(其中 'headers' 包括身份验证和主机名,此处 graph.microsoft.com
)
结果请求如下所示:
-> PUT /v1.0/sites/.../createUploadSession HTTP/1.1
-> Host: graph.microsoft.com
-> User-Agent: libcurl/7.64.1 r-curl/4.3 httr/1.4.2
-> Accept-Encoding: deflate, gzip
-> Accept: application/json, text/xml, application/xml, */*
-> Content-Type: text/plain
-> Content-Length: 4543954542
当然,这失败了:
<- HTTP/1.1 413 Request Entity Too Large
<- Content-Type: text/html
<- Server: Microsoft-IIS/10.0
<- Strict-Transport-Security: max-age=31536000
<- Date: Fri, 02 Oct 2020 12:32:29 GMT
<- Connection: close
<- Content-Length: 67
<-
因为如文档所述,我们需要上传 327,680 字节的块。但是,我假设 httr
的 upload_file
允许流式传输。这就是我卡住的地方:看起来我的请求仍在尝试一次上传所有内容,那么我如何 'invoke' 这种流式传输行为?是否需要某种 while
循环才能继续发送下一个数据块?
此功能现已在 Microsoft365R 包中提供。完全披露:我是这个包的作者。
site <- get_sharepoint_site("sitename")
site$get_drive()$upload_file("path/to/file", "destfilename")