Crear archivo con Google Drive Api v3(javascript)
google-drive-api (4)
Aquí está la solución con
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;
}
});
necesitará connect/authorise con cualquiera de los siguientes ámbitos
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/drive.file
EDITAR: es posible crear archivos de google (doc, hojas, etc.) cambiando el
mimeType
de
application/vnd.google-apps.folder
a uno de los
tipos de google mime
compatibles.
SIN EMBARGO
, a partir de ahora no es posible cargar ningún contenido en los archivos creados.
Para cargar archivos, use la solución provista por @Geminus . Tenga en cuenta que puede cargar un archivo de texto o un archivo csv y establecer su tipo de contenido en google doc u hojas de google respectivamente, y google intentará convertirlo. He probado esto para texto -> doc y funciona.
Quiero crear un archivo con contenido usando la API de Google Drive v3. Me he autenticado a través de OAuth y tengo la API de Drive cargada. Las declaraciones como el siguiente trabajo (pero producen un archivo sin contenido):
gapi.client.drive.files.create({
"name": "settings",
}).execute();
Lamentablemente, no puedo entender cómo crear un archivo que tenga contenido. No puedo encontrar un ejemplo de JavaScript con Drive API v3. ¿Hay algunos parámetros especiales que necesito pasar?
Para simplificar, suponga que tengo una Cadena como ''{"name": "test"}'' que está en formato JSON que debería ser el contenido del archivo creado.
Desafortunadamente, no he encontrado una respuesta usando solo la API de Google Drive, en su lugar seguí el comentario de Gerardo y usé la API de solicitud de Google. A continuación se muestra una función que carga un archivo en 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);
}
esto funciona bien 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);
});
/* 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) { });
}