2016-01-20 15 views
12

GoogleドライブAPI v3を使用してコンテンツを含むファイルを作成したいとします。私はOAuth経由で認証し、ドライブAPIを読み込みました。次の作品のようなステートメント(ただし、コンテンツのないファイルを作成):Googleドライブでファイルを作成するApi v3(javascript)

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

残念ながら、私はコンテンツを持つファイルを作成する方法を見つけ出すことはできません。 Drive API v3を使用したJavaScriptの例が見つかりません。いくつか特別なパラメーターが必要ですか?

わかりやすくするために、作成したファイルの内容である必要があるJSON形式の '{"name": "test"}のような文字列があるとします。

+0

この文書を確認してください。私はv2用ですが、プロセスは非常に似ています。 URLのバージョンをv3に変更し、v3に従ってパラメータを変更する必要があります(例: 'title'の代わりに 'name'を使用)https://developers.google.com/drive/v2/reference/files/ insert#examples – Gerardo

+0

リンクありがとうございますが、これはライブラリを使う精神に反していると思います(少なくともv3では):それ以外の場合は自分でリクエストを作成する必要があります。ここで私はそれを 'POST'リクエストにして、境界で区切られた長い文字列に物事を連結したいと思うように考える必要があります。私はv3のポイントはこれらの事を避けることだったと思うし、それを行う別の方法があるはずだと思います。 – Geminus

+0

Googleの一部の開発者の[upload.js](https://github.com/googledrive/cors-upload-sample)をご覧ください。私はドライブv3用の修正版を持っています。api [here](https://gist.github.com/DrPaulBrewer/eaea4ad927389643e56ce566d4ed513e) – Paul

答えて

4

ここでは、あなたがする必要があります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; 
     } 
    }); 

ですサポートさgoogle mime typesのいずれかにapplication/vnd.google-apps.folderからmimeTypeを変更することにより、Googleのファイル(DOC、シートなど)を作成することが可能である:following scopes

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

EDITのいずれかで。 いつものように、作成したファイルにコンテンツをアップロードすることはできません。

ファイルをアップロードするには、solution provided by @Geminusを使用してください。テキストファイルまたはcsvファイルをアップロードして、それぞれのコンテンツタイプをGoogleドキュメントまたはGoogleシートに設定することができます.Googleはそれを変換しようとします。私はテキスト - > docのためにこれをテストし、それは動作します。

+0

これは、ファイルではなくフォルダを作成します。 –

+0

これは実際にフォルダを作成し、すぐにファイルの解決策を投稿します – Aurovrata

+0

@DavidGiven、私は自分の答えを編集しました。doc/sheetまたはその他のサポートされているファイルタイプを作成できますが、 'gapi.client.drive .files.create'を使用して実際にコンテンツをアップロードします。 – Aurovrata

14

残念ながら、GoogleドライブAPIのみを使用して回答を見つけられず、代わりにGerardoのコメントに従い、GoogleリクエストAPIを使用しました。以下は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

'gapi.client.drive'でこれを行う方法を知りましたなら、知っている。 –

+0

ありがとうございます。私は狂っていた。 –

+0

私は自分のフォルダにファイルを持っており、これを行うにはURLを使ってアップロードしますか? –

0

これは細かい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

これは、ファイルではなくフォルダを作成するためのようです。 – ADyson

+0

ええ、あなたはそれと一緒にフォルダを作ることができます...それは "gapi.client.drive.files.create"の "files.create"と言います。最後のすべてのノードはフォルダよりもファイルのようです。 –

+0

私はそのことを認識していますが、質問は特にファイルを作成することについて尋ねました。だから、フォルダの作成を示す例がなぜ有用なのかを知ることは難しいです。 – 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) { }); 
} 

出典:https://gist.github.com/mkaminsky11/8624150

+0

あなたは実際に作業をしている 'insertFile()'を逃しました。上記の@Geminusの答えと同じですが、データをアップロードするための明示的な投稿を使用しています。 –

関連する問題