小编iai*_*ina的帖子

如何使用httr发布多部分/相关内容(适用于Google Drive API)

我使用httr将简单文件上传到Google云端硬盘.问题是每个文档都被上传为"无标题",我必须修补元数据以设置标题.PATCH请求偶尔会失败.

根据API,我应该能够进行分段上传,允许我将标题指定为上传文件的同一POST请求的一部分.

res<-POST(
  "https://www.googleapis.com/upload/drive/v2/files?convert=true",
  config(token=google_token),
  body=list(y=upload_file(file))
)
id<-fromJSON(rawToChar(res$content))$id
if(is.null(id)) stop("Upload failed")
url<-paste(
  "https://www.googleapis.com/drive/v2/files/",
  id,
  sep=""
)
title<-strsplit(basename(file), "\\.")[[1]][1]
Sys.sleep(2)
res<-PATCH(url,
  config(token=google_token),
  body=paste('{"title": "',title,'"}', sep = ""),
  add_headers("Content-Type" = "application/json; charset=UTF-8")
)
stopifnot(res$status_code==200)
cat(id)
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的事情:

res<-POST(
  "https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart&convert=true",
  config(token=google_token),
  body=list(y=upload_file(file),
            #add_headers("Content-Disposition" = "text/json"),
            json=toJSON(data.frame(title))
  ),
  encode="multipart",
  add_headers("Content-Type" = "multipart/related"),
  verbose()
)
Run Code Online (Sandbox Code Playgroud)

我得到的输出显示各个部分的内容编码是错误的,它导致400错误:

-> POST /upload/drive/v2/files?uploadType=multipart&convert=true HTTP/1.1
-> User-Agent: curl/7.19.7 Rcurl/1.96.0 httr/0.6.1
-> Host: www.googleapis.com
-> Accept-Encoding: gzip
-> Accept: application/json, text/xml, application/xml, */*
-> Authorization: Bearer ya29.ngGLGA9iiOrEFt0ycMkPw7CZq23e6Dgx3Syjt3SXwJaQuH4B6dkDdFXyIC6roij2se7Fs-Ue_A9lfw
-> Content-Length: 371 …
Run Code Online (Sandbox Code Playgroud)

file-upload r multipart google-drive-api httr

5
推荐指数
1
解决办法
2092
查看次数

标签 统计

file-upload ×1

google-drive-api ×1

httr ×1

multipart ×1

r ×1