Я прочитал документ с помощью API Google Docs с documents.get и сохранил возвращенный Json в файл.
Теперь мне нужно загрузить сохраненный файл обратно в Google. Я делаю это, как описано в Загрузка файлов - Выполните возобновляемую загрузку раздел. Но мои запросы терпят неудачу с ошибкой 400 Bad Request:
POST https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&fields=id HTTP/1.1
X-Upload-Content-Type: application/vnd.google-apps.document
X-Upload-Content-Length: 11861
User-Agent: My Client
Authorization: Bearer XXXXX
Content-Type: application/json; charset=utf-8
Host: www.googleapis.com
Content-Length: 74
Accept-Encoding: gzip, deflate
{"mimeType":"application/vnd.google-apps.document","name":"General1.gdoc"}
HTTP/1.1 200 OK
X-GUploader-UploadID: AEnB2UrINNZDf13bOH9NvoZqXqX1K4reJrqA-0i2mEWNUJaSJKJVD2gcVd_EE6AP7WmefpQnL8aLu5iROcWBCxnKu3RVHlMuSQ
Location: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&fields=id&upload_id=AEnB2UrINNZDf13bOH9NvoZqXqX1K4reJrqA-0i2mEWNUJaSJKJVD2gcVd_EE6AP7WmefpQnL8aLu5iROcWBCxnKu3RVHlMuSQ
Vary: Origin
Vary: X-Origin
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Date: Thu, 04 Jul 2019 20:53:06 GMT
Content-Length: 0
Server: UploadServer
Content-Type: text/html; charset=UTF-8
Alt-Svc: quic=":443"; ma=2592000; v="46,43,39"
PUT https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&fields=id&upload_id=AEnB2UrINNZDf13bOH9NvoZqXqX1K4reJrqA-0i2mEWNUJaSJKJVD2gcVd_EE6AP7WmefpQnL8aLu5iROcWBCxnKu3RVHlMuSQ HTTP/1.1
User-Agent: My Client
Authorization: Bearer XXXX
Content-Range: bytes 0-11860/11861
Host: www.googleapis.com
Content-Length: 11861
Accept-Encoding: gzip, deflate
{
"title": "General1",
"body": {
"content": [
{
"endIndex": 1,
"sectionBreak": {
"sectionStyle": {
"columnSeparatorStyle": "NONE",
"contentDirection": "LEFT_TO_RIGHT"
...
}
HTTP/1.1 400 Bad Request
X-GUploader-UploadID: AEnB2UrINNZDf13bOH9NvoZqXqX1K4reJrqA-0i2mEWNUJaSJKJVD2gcVd_EE6AP7WmefpQnL8aLu5iROcWBCxnKu3RVHlMuSQ
Vary: Origin
Vary: X-Origin
Content-Type: application/json; charset=UTF-8
Content-Length: 171
Date: Thu, 04 Jul 2019 20:53:06 GMT
Server: UploadServer
Alt-Svc: quic=":443"; ma=2592000; v="46,43,39"
{
"error": {
"errors": [
{
"domain": "global",
"reason": "badRequest",
"message": "Bad Request"
}
],
"code": 400,
"message": "Bad Request"
}
}
Я также пытался отправить POST с заголовком X-Upload-Content-Type: application / json, но результат тот же.
Есть идеи, почему вышеупомянутый запрос не выполняется?
К сожалению, я не могу использовать функцию documents.create () для загрузки документа, поскольку он создает только пустой документ без содержимого.
Обратите внимание, что я не могу использовать операции экспорта Google, потому что мне нужно избегать преобразования документов json-> docx-> json, чтобы избежать нарушения форматирования.
UPDATE:
Вот мой код загрузки Google Doc в C #. У меня работает просто файл. В результате Google Doc Json сохраняется в файле:
var gdoc = docsService.Documents.Get("1g0jD2870BOtQ7pw8NNRb__Mlku6V-dlBmVpkiiK7WKg");
using (var gdocStream = gdoc.ExecuteAsStream())
{
using (var file = new System.IO.FileStream("D:\\General1.gdoc", FileMode.CreateNew))
{
gdocStream.CopyTo(file);
}
}
Вот мой код загрузки, который не работает:
var fileMetadata = new File()
{
Name = "General1.gdoc",
MimeType = "application/vnd.google-apps.document"
};
FilesResource.CreateMediaUpload request;
using (var stream = new System.IO.FileStream("D:\\gdoc.gdoc", System.IO.FileMode.Open))
{
request = driveService.Files.Create(fileMetadata, stream, "application/vnd.google-apps.document");
request.Fields = "id";
var response = request.Upload();
}
var file = request.ResponseBody