Próbuję pobrać plik z dysku Google za pomocą interfejsu API Google SDK API przy użyciu pliku node.js.Nie można pobrać pliku z Dysku Google przy użyciu interfejsu API - node.js
Ale nie jestem w stanie napisać/zapisz plik na stronie serwera - node.js
Code: -
var GoogleTokenProvider = require("refresh-token").GoogleTokenProvider,
async = require('async'),
fs = require("fs"),
request = require('request'),
_accessToken;
var _XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var https = require('https');
const CLIENT_ID = "";
const CLIENT_SECRET = "";
const REFRESH_TOKEN = '';
const ENDPOINT_OF_GDRIVE = 'https://www.googleapis.com/drive/v2';
async.waterfall([
//-----------------------------
// Obtain a new access token
//-----------------------------
function(callback) {
var tokenProvider = new GoogleTokenProvider({
'refresh_token': REFRESH_TOKEN,
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET
});
tokenProvider.getToken(callback);
},
//--------------------------------------------
// Retrieve the children in a specified folder
//
// ref: https://developers.google.com/drive/v2/reference/files/children/list
//-------------------------------------------
function(accessToken, callback) {
_accessToken = accessToken;
request.get({
'url': ENDPOINT_OF_GDRIVE + '/files?' + "q='root' in parents and (mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document')",
'qs': {
'access_token': accessToken
}
}, callback);
},
//----------------------------
// Parse the response
//----------------------------
function(response, body, callback) {
var list = JSON.parse(body);
if (list.error) {
return callback(list.error);
}
callback(null, list.items[0]);
},
//-------------------------------------------
// Get the file information of the children.
//
// ref: https://developers.google.com/drive/v2/reference/files/get
//-------------------------------------------
function(children, callback) {
var xhr = new _XMLHttpRequest();
xhr.open('GET', children.downloadUrl);
xhr.setRequestHeader('Authorization', 'Bearer ' + _accessToken);
xhr.onload = function() {
console.log("xhr.responseText", xhr.responseText)
fs.writeFile("download.docx", xhr.responseText)
callback(xhr.responseText);
};
xhr.onerror = function() {
callback(null);
};
xhr.send();
}
],
function(err, results) {
if (!err) {
console.log(results);
}
});
jestem coraz to w konsoli: - Treść XHR .responseText to coś takiego:
��▬h��↕E6M��~��3�3∟�9�� � �►��/2�:���♂�4��]�♀I�R���►
$SB6Q���c↔��H�=;+
���►q�3Tdכ��@!T��hEl_�|�I�↨��h(�^:▬�[h̓D♠��f���♠*���ݾ��M→
�1⌂♦"N�↑�o�]�7U$��A6����♠�W��k`�f▬♫��K�Z�^‼�0{<Z�▼�]F�����
���J♥A♀��♣�a�}7�
"���H�w"�♥���☺w♫̤ھ�� �P�^����O֛���;�<♠�aYՠ؛`G�kxm��PY�[��g
Gΰino�/<���<�1��ⳆA$>"f3��\�ȾT��∟I S�������W♥����Y
Proszę mi pomóc znać co to jest format danych Dostaję z dysku Api i zapisać go w formacie, który tak, że mam pełną .docx plik
Edit
Jestem otwarty na wszelkie metody użyć innego niż xmlRequest jeśli pomaga mi pobrać plik (.docx). Wydaje się, że
Twoim głównym priorytetem powinno być ustalenie, jak odzyskać dane w postaci bufora - gdy tylko dane binarne zostaną przekształcone w ciąg, dane zostaną uszkodzone. Korzystając z modułu Request.js, musisz ustawić kodowanie: null w opcjach żądania. Ale z Xhr, nie jestem pewien. –
Czego się spodziewałeś? Funkcja downloadUrl jest używana tylko w przypadku plików innych niż Google. Jeśli jest to dokument Google, użyjesz jednego z linków do eksportu. – pinoyyid
@pinoyyid, cokolwiek może być wyjściem, chcę tylko zapisać/zapisać/pobrać dane w poprawnym formacie, w moim przypadku jest to plik .docx i po pobraniu go na serwer, muszę edytować ten plik .docx –