2012-03-21 2 views
0

Я пытаюсь загрузить файл, используя REST API Node и Google Docs. Я могу загрузить файл просто отлично, если я не включаю метаданные, но он всегда будет загружен как «Без названия».API Документов Google: невозможно установить заголовок документа

Но когда я включаю мета данных, я получаю следующее сообщение об ошибке после отправки моих данных атом и пытается продолжить загрузку файла:

ParseException - Содержимое не допускается в прологе

Это мой первый запрос на создание сеанса загрузки и получить возобновляемую-медиа-ссылку

var meta = '<?xml version="1.0" encoding="UTF-8"?>' 
    meta+= '<entry xmlns="http://www.w3.org/2005/Atom" xmlns:docs="http://schemas.google.com/docs/2007">' 
    meta+= '<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/docs/2007#document"/>' 
    meta+= '<title>Test</title></entry>' 

var options = { 
    host: 'docs.google.com', 
    path: '/feeds/upload/create-session/default/private/full', 
    method: 'POST', 
    headers: { 
     'Host' : 'docs.google.com', 
     'Content-Length' : meta.length, 
     'Content-Type': 'application/atom+xml', 
     'GData-Version' : 3, 
     'Authorization' : 'GoogleLogin auth=' + authToken, 
     'X-Upload-Content-Type' : 'application/msword', 
     'X-Upload-Content-Length' : 31232 
    } 
} 

var req = https.request(options, function (res) { 
    // make 2nd request 

}); 

req.end(meta); 

Это то, что мой второй запрос выглядит как после получения возобновляемой-медиа-ссылки

var options = { 
    host: 'docs.google.com', 
    path: resumableMediaLink, 
    method: 'PUT', 
    headers: { 
     'Content-Length': data.length, 
     'Content-Type': 'application/msword', 
     'Content-Range': 'bytes 0-' + (data.length-1) +'/'+ data.length 
    } 
} 

var req = https.request(options, function (res) { 
    res.on('data', function (chunk) { 
     // ... 
    }); 
}); 

req.write(data); 
req.end(); 

Похоже, что я посылаю данные об атоме неправильно. Любые идеи о том, что я могу делать неправильно?

ответ

0

Я понял, что я делаю неправильно.

Мне нужно было установить заголовок «Slug» в первом запросе POST, чтобы начать возобновляемый сеанс.

У меня было это в следующем запросе.