2016-01-20 19 views
12

Chcę utworzyć plik z treścią za pomocą Google Drive API v3. Uwierzytelniłem przez OAuth i załadowałem interfejs Drive API. Stwierdzenia typu poniższej pracy (ale stworzyć plik bez zawartości):Utwórz plik na Dysku Google Api v3 (javascript)

gapi.client.drive.files.create({ 
    "name": "settings", 
}).execute(); 

Niestety nie mogę dowiedzieć się, jak utworzyć plik, który ma zawartość. Nie mogę znaleźć przykładu kodu JavaScript przy użyciu Drive API v3. Czy są jakieś specjalne parametry, które muszę przekazać?

Dla uproszczenia przyjmijmy, że mam ciąg taki jak "{" nazwa ":" test "}", który jest w formacie JSON, który powinien być zawartością utworzonego pliku.

+0

Sprawdź tę dokumentację, wiem, że jest dla v2, ale proces jest bardzo podobny. Będziesz musiał zmienić wersję w adresie URL na v3 i parametr zgodny z v3 (np. Zamiast "tytuł" użyj "name") https://developers.google.com/drive/v2/reference/files/ wstaw # przykłady – Gerardo

+0

Dzięki za link, ale wydaje mi się, że jest to nieco sprzeczne z duchem korzystania z biblioteki (przynajmniej w wersji 3): W żadnym innym przypadku nie muszę sam budować żądania. Tutaj muszę wybrać myśli, tak jak chcę, aby było to żądanie typu "POST" i musiałem łączyć rzeczy w długi ciąg ograniczony przez granicę. Myślę, że punktem v3 było unikanie tych rzeczy i myślę, że powinien istnieć inny sposób, aby to zrobić. – Geminus

+0

Spójrz na [upload.js] (https://github.com/googledrive/cors-upload-sample) od niektórych programistów w Google. Mam zmodyfikowaną wersję dla drive v3 api [tutaj] (https://gist.github.com/DrPaulBrewer/eaea4ad927389643e56ce566d4ed513e) – Paul

Odpowiedz

4

tutaj jest rozwiązanie z gapi.client.drive,

var parentId = '';//some parentId of a folder under which to create the new folder 
    var fileMetadata = { 
    'name' : 'New Folder', 
    'mimeType' : 'application/vnd.google-apps.folder', 
    'parents': [parentId] 
    }; 
    gapi.client.drive.files.create({ 
     resource: fileMetadata, 
    }).then(function(response) { 
     switch(response.status){ 
     case 200: 
      var file = response.result; 
      console.log('Created Folder Id: ', file.id); 
      break; 
     default: 
      console.log('Error creating the folder, '+response); 
      break; 
     } 
    }); 

musisz connect/authorise z żadnym z following scopes

https://www.googleapis.com/auth/drive 
https://www.googleapis.com/auth/drive.file 

EDIT: możliwe jest tworzenie plików Google (DOC, pościel i tak dalej), zmieniając mimeType z application/vnd.google-apps.folder do jednego z obsługiwanych google mime types. JEDNAK, od tej chwili nie można załadować żadnych treści do utworzonych plików.

Aby przesłać pliki, należy użyć solution provided by @Geminus. Zauważ, że możesz przesłać plik tekstowy lub plik csv i ustawić jego typ zawartości odpowiednio do google doc lub google sheets, a Google spróbuje go przekonwertować. Przetestowałem to dla tekstu -> doc i to działa.

+0

Powoduje to utworzenie folderu, a nie pliku. –

+0

tworzy to właściwie folder, wkrótce opublikuję rozwiązanie dla pliku – Aurovrata

+0

@DavidGiven, Właśnie edytowałem swoją odpowiedź, możesz utworzyć dokument/arkusz lub dowolny inny obsługiwany typ pliku, ale nie możesz użyć 'gapi.client.drive .files.create ", aby faktycznie przesłać zawartość. – Aurovrata

14

Niestety, nie znalazłem odpowiedzi przy użyciu apara google google, zamiast tego poszedłem za komentarzem Gerarda i użyłem api google do żądania google. Poniżej znajduje się funkcja, która ładuje plik na dysk Google.

var createFileWithJSONContent = function(name,data,callback) { 
    const boundary = '-------314159265358979323846'; 
    const delimiter = "\r\n--" + boundary + "\r\n"; 
    const close_delim = "\r\n--" + boundary + "--"; 

    const contentType = 'application/json'; 

    var metadata = { 
     'name': name, 
     'mimeType': contentType 
    }; 

    var multipartRequestBody = 
     delimiter + 
     'Content-Type: application/json\r\n\r\n' + 
     JSON.stringify(metadata) + 
     delimiter + 
     'Content-Type: ' + contentType + '\r\n\r\n' + 
     data + 
     close_delim; 

    var request = gapi.client.request({ 
     'path': '/upload/drive/v3/files', 
     'method': 'POST', 
     'params': {'uploadType': 'multipart'}, 
     'headers': { 
      'Content-Type': 'multipart/related; boundary="' + boundary + '"' 
     }, 
     'body': multipartRequestBody}); 
    if (!callback) { 
     callback = function(file) { 
     console.log(file) 
     }; 
    } 
    request.execute(callback); 
} 
+7

Jeśli kiedykolwiek dowiedziałeś się, jak to zrobić przez 'gapi.client.drive', chciałbym wiedzieć. –

+0

Dzięki za to. Szaleję. –

+0

Mam plik w moim folderze i przesłać za pomocą adresu URL, jak to zrobić? –

0

to działa prawidłowo usin v3:

 var fileMetadata = { 
      'name' : 'MaxBarrass', 
      'mimeType' : 'application/vnd.google-apps.folder' 
     }; 

     gapi.client.drive.files.create({ 
      resource: fileMetadata, 
      fields: 'id' 
     }).execute(function(resp, raw_resp) { 
      console.log('Folder Id: ', resp.id); 
     }); 
+0

wydaje się, że jest to tworzenie folderu, a nie pliku. – ADyson

+0

yeah możesz utworzyć folder z nim jako ... mówi "files.create" w "gapi.client.drive.files.create", wszystkie jego węzły na końcu tak i są bardziej podobne do plików niż foldery. –

+0

Zdaję sobie z tego sprawę, ale pytanie dotyczyło tworzenia plików. Trudno więc zrozumieć, dlaczego użyteczny byłby przykład pokazujący tworzenie folderu. – ADyson

0
/* Now to create a new file */ 
function insertNewFile(folderId) 
{ 
    var content = " "; 
    var FolderId = ""; 
    var contentArray = new Array(content.length); 
    for (var i = 0; i < contentArray.length; i++) 
    { 
     contentArray[i] = content.charCodeAt(i); 
    } 
    var byteArray = new Uint8Array(contentArray); 
    var blob = new Blob([byteArray], {type: 'text/plain'});  
    insertFile(blob, fileInserted, folderId); 
} 
function fileInserted(d) 
{ 
    setPercent("100"); 
    var FI = FolderId; 
    if(FI !== myRootFolderId) 
    {   
     insertFileIntoFolder(FI, d.id);   
     removeFileFromFolder(d.parents[0].id,d.id);  
    } 
    openFile(d.id); 
} 
function insertFileIntoFolder(folderId, fileId) 
{ 
    var body = {'id': folderId}; 
    var request = gapi.client.drive.parents.insert({ 
     'fileId': fileId, 
     'resource': body }); 
    request.execute(function(resp) { }); 
} 

Źródło: https://gist.github.com/mkaminsky11/8624150

+0

Brakowało ci 'insertFile()', które faktycznie wykonuje pracę; to jest tak samo jak powyżej @Geminus, używając jawnego postu do przesłania danych. –

Powiązane problemy