2016-01-20 19 views
12

के साथ फ़ाइल बनाएं मैं Google ड्राइव एपीआई v3 का उपयोग कर सामग्री के साथ एक फाइल बनाना चाहता हूं। मैंने ओएथ के माध्यम से प्रमाणीकृत किया है और ड्राइव एपीआई लोड किया है। निम्नलिखित काम की तरह विवरण (लेकिन सामग्री के बिना एक फ़ाइल उत्पादन):Google ड्राइव एपीआई v3 (जावास्क्रिप्ट)

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

दुर्भाग्य से मैं समझ नहीं एक सामग्री है कि एक फ़ाइल बनाने के लिए कैसे। मुझे ड्राइव एपीआई v3 का उपयोग कर एक जावास्क्रिप्ट उदाहरण नहीं मिल रहा है। क्या कुछ विशेष पैरामीटर हैं जिन्हें मुझे पास करने की ज़रूरत है?

सादगी के लिए, मान लें कि मेरे पास '{"नाम": "test"}' जैसा स्ट्रिंग है जो JSON प्रारूप में है जो बनाई गई फ़ाइल की सामग्री होनी चाहिए।

+0

इस दस्तावेज़ को जांचें, मुझे पता है v2 के लिए है लेकिन प्रक्रिया बहुत समान है। आपको यूआरएल में v3 और v3 के अनुसार पैरामीटर को बदलने की आवश्यकता होगी (उदाहरण के लिए 'शीर्षक' उपयोग 'नाम' के बजाय) https://developers.google.com/drive/v2/reference/files/ सम्मिलित करें # उदाहरण – Gerardo

+0

लिंक के लिए धन्यवाद, लेकिन मुझे लगता है कि यह लाइब्रेरी का उपयोग करने की भावना के खिलाफ कुछ हद तक है (कम से कम v3 में): किसी अन्य मामले में मुझे खुद को अनुरोध बनाना नहीं है। यहां मुझे लगता है कि मुझे लगता है कि मैं इसे 'पोस्ट' अनुरोध करना चाहता हूं और इसे सीमा से सीमित लंबी स्ट्रिंग में चीजों को जोड़ना है। मुझे लगता है कि v3 का बिंदु इन चीजों से बचना था और मुझे लगता है कि ऐसा करने का दूसरा तरीका होना चाहिए। – Geminus

+0

Google पर कुछ devs से [upload.js] (https://github.com/googledrive/cors-upload- नमूना) पर एक नज़र डालें। मेरे पास ड्राइव v3 api के लिए एक संशोधित संस्करण है [यहां] (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; 
     } 
    }); 

आपकरने की आवश्यकता होगी following scopes

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

संपादित से किसी के साथ +८१८४१९९३२१०: यह समर्थित google mime types से एक के लिए application/vnd.google-apps.folder से mimeType बदलकर गूगल फ़ाइलें (doc, चादरें और इसी तरह) बनाने के लिए संभव है। हाउवर, अब तक किसी भी सामग्री को बनाई गई फ़ाइलों में अपलोड करना संभव नहीं है।

फ़ाइलों को अपलोड करने के लिए, solution provided by @Geminus का उपयोग करें। ध्यान दें कि आप एक टेक्स्ट फ़ाइल या एक सीएसवी फ़ाइल अपलोड कर सकते हैं और इसके सामग्री प्रकार को क्रमशः Google डॉक या Google शीट पर सेट कर सकते हैं, और Google इसे कन्वर्ट करने का प्रयास करेगा। मैंने टेक्स्ट -> डॉक्टर के लिए इसका परीक्षण किया है और यह काम करता है।

+0

यह एक फ़ोल्डर बनाता है, फाइल नहीं, हालांकि। –

+0

यह वास्तव में एक फ़ोल्डर बनाता है, मैं जल्द ही फ़ाइल – Aurovrata

+0

@ डेविडगिवेन के लिए समाधान पोस्ट करूंगा, मैंने अभी अपना जवाब संपादित किया है, आप एक दस्तावेज़/शीट या कोई अन्य समर्थित फ़ाइल प्रकार बना सकते हैं, लेकिन आप 'gapi.client.drive का उपयोग नहीं कर सकते वास्तव में सामग्री अपलोड करने के लिए .files.create'। – Aurovrata

14

दुर्भाग्य से, मुझे केवल Google ड्राइव एपीआई का उपयोग करके कोई जवाब नहीं मिला है, इसके बजाय मैंने जेरार्डो की टिप्पणी का पालन किया और 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

मेरे पास मेरे फ़ोल्डर में फ़ाइल है और यूआरएल का उपयोग करके अपलोड करें यह कैसे करें? –

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 के उत्तर जैसा ही है। –

संबंधित मुद्दे