我正在尝试通过此链接关注google drive api的可恢复媒体上传。 https://developers.google.com/drive/manage-uploads#resumable
我的第一个请求很顺利,我在Location标题中找到了第二个url。 但是,当我在文档中给出第二个PUT调用时,它会抛出一个错误的请求。
Request 1:
POST https://www.googleapis.com/upload/drive/v2/files?uploadType=resumable
Request Header 1:
Content-Type: application/json
Authorization: Bearer ya..
X-Upload-Content-Type: text/plain
X-Upload-Content-Length: 112
Host: www.googleapis.com
Content-Length: 112
Body
{'title' : 'bravo122314.txt', 'mimeType': 'text/plain', 'parents' : [{'id': '0Bw5JasxEfsasa8NNsdU5dU123iVHc'}] }
Response Header 1:
Location: https://www.googleapis.com/upload/drive/v2/files?uploadType=resumable&upload_id=ASM
Date: Tue, 03 Dec 2013 21:07:40 GMT
Server: HTTP Upload Server Built on Nov 15 2013 16:02:54 (1384560174)
Content-Length: 0
Content-Type: text/html; charset=UTF-8
这是以下请求
Request 2:
PUT https://www.googleapis.com/upload/drive/v2/files?uploadType=resumable&upload_id=ASM
Request Header 2:
Authorization: Bearer ya..
Content-Type: text/plain
Response 2:
{
"error":{
"errors":[
{
"domain":"global",
"reason":"badRequest",
"message":"Invalid Upload Request"
}
],
"code":400,
"message":"Invalid Upload Request"
}
}
以前有人遇到过这个问题吗?我错过了一些标题吗?
答案 0 :(得分:1)
希望您现在已经解决了这个问题,但由于我刚开始尝试这样做,我会在这里添加一些个人调查结果。
向我跳出的第一件事X-Upload-Content-Length: 112
应该是您PUT
中要发送的文件的长度,而不是您第一次请求的长度。
我还需要在"Content-Encoding": "base64"
中添加PUT
作为标题,然后确保将blob编码为base64。我一直在javascript中这样做,所以我用btoa(reader.result)
这两个标头都需要与Content-Type
请求中的Content-Length
和PUT
标头相匹配:
X-Upload-Content-Type: text/plain
X-Upload-Content-Length: 112
出于安全原因,您无法在javascript请求中设置Content-Type
,但浏览器应该能够处理该问题。
答案 1 :(得分:0)
尝试" uploadType"使用"媒体"确保可以先上传,然后尝试" resumable"?
PUT https://www.googleapis.com/upload/drive/v2/files/{id}?uploadType=media
请注意 id ,您可以看到参考号。
REF: How do I add/create/insert files to Google Drive through the API?
答案 2 :(得分:0)
在第二个请求中,您还需要设置Content-Length标头,它将如下所示:
Request 2:
PUT https://www.googleapis.com/upload/drive/v2/files?uploadType=resumable&upload_id=ASM
Request Header 2:
Authorization: Bearer ya..
Content-Type: text/plain
Content-Length: 112
Request Body 2:
{ bytes of file to upload }