Подтвердить что ты не робот

Создать файл с Google Диском Api v3 (javascript)

Я хочу создать файл с контентом с помощью Google Диска API v3. Я прошел аутентификацию через OAuth и загрузил Drive API. Выражения вроде следующей работы (но создайте файл без содержимого):

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

К сожалению, я не могу понять, как создать файл с содержимым. Я не могу найти пример JavaScript, используя Drive API v3. Есть ли какие-то специальные параметры, которые мне нужно передать?

Для простоты предположим, что у меня есть String как '{ "name": "test" }', который находится в формате JSON, который должен быть содержимым созданного файла.

4b9b3361

Ответ 1

вот решение с 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;
    }
});

вам нужно подключиться/авторизоваться с помощью одной из следующих областей

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

РЕДАКТИРОВАТЬ: можно создавать файлы Google (документы, листы и т.д.), Изменив mimeType из application/vnd.google-apps.folder на один из поддерживаемых типов Google MIME. ОДНАКО, на данный момент невозможно загрузить какой-либо контент в созданные файлы.

Для загрузки файлов используйте решение, предоставленное @Geminus. Обратите внимание, что вы можете загрузить текстовый файл или CSV файл и установить его тип контента в Google DOC или Google листов соответственно, и Google будет пытаться преобразовать его. Я проверил это для текста → документ, и это работает.

Ответ 2

К сожалению, я не нашел ответа, используя только api google, вместо этого я последовал за комментарием Gerardo и использовал api-запрос google. Ниже приведена функция, которая загружает файл на диск 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);
}

Ответ 3

это отлично работает 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);
        });

Ответ 4

/*  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