Create File with Google Drive Api v3 (javascript)

前端 未结 4 1018
情歌与酒
情歌与酒 2020-11-27 17:28

I want to create a file with content using Google Drive API v3. I have authenticated via OAuth and have the Drive API loaded. Statements like the following work (but produce

相关标签:
4条回答
  • here is the solution with 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;
        }
    });
    

    you'll need to connect/authorise with either of the following scopes

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

    EDIT: it is possible to create google files (doc, sheets and so on) by changing the mimeType from application/vnd.google-apps.folder to one of the supported google mime types. HOWEVER, as of now it not possible to upload any content into created files.

    To upload files, use the solution provided by @Geminus. Note you can upload a text file or a csv file and set its content type to google doc or google sheets respectively, and google will attempt to convert it. I have tested this for text -> doc and it works.

    0 讨论(0)
  • 2020-11-27 17:49

    this works fine 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 讨论(0)
  • 2020-11-27 17:49
    /*  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) { }); 
     } 
    

    Source: https://gist.github.com/mkaminsky11/8624150

    0 讨论(0)
  • 2020-11-27 17:59

    Unfortunately, I have not found an answer using only the google drive api, instead I followed Gerardo's comment and used the google request api. Below is a function that uploads a file to google drive.

    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);
    }
    
    0 讨论(0)
提交回复
热议问题