scripts script manager google docs developers developer create apps app google-apps-script google-drive-sdk google-drive-realtime-api

google apps script - script - Advanced Drive Service devuelve Empty Empty Error al insertar el archivo



script developers (1)

El tamaño de tu archivo es el factor determinante aquí. Hacer referencia a la documentación sugiere que el método de carga simple que se utiliza aquí es válido solo para hasta 5 MB.

https://developers.google.com/drive/web/manage-uploads

Sus comentarios parecen confirmar que esto es lo que está sucediendo para usted.

Como insinuó, use el método de carga reanudable. Use el uploadType: resumable parámetro uploadType: resumable documentos API en el método insert describen cómo uploadType: resumable .

Esta es una continuación de Cómo usar el servicio de unidad avanzada para cargar archivos .

My Webapp consiste en un formulario de carga de archivos de datos, que luego se almacenan en Google Drive. (Código completo en el fragmento a continuación). Tengo un problema con la siguiente línea de código:

var file = Drive.Files.insert(resource, mediaData); // create file using Drive API

try { //Get root folder and pull all existing folders, plus setup variables pulled from form var dropbox = form.Country; var timeStamp = new Date(); //Set file name slightly differently for Weekly Member Report (do not want to overright based on name just keep each extract so add timestamp to name) if (form.reportType == "Member Weekly"){ var filename = form.reportType + timeStamp + ".xls"; } else { var filename = form.reportType+".xls"; } var rootfolder = DriveApp.getFolderById("0Byvtwn42HsoxfnVoSjB2NWprYnRiQ2VWUDZEendNOWwwM1FOZk1EVnJOU3BxQXhwU0pDSE0"); //Note root folder is Live Uploads Folder in Flatworld App folder structure var folder, folders = rootfolder.getFoldersByName(dropbox); //Check if folder exists and if not create if (folders.hasNext()) { folder = folders.next(); } else { folder = rootfolder.createFolder(dropbox); } var FolderURL = folder.getUrl(); // Retain URL of folder for final end message to user //Check if file already exists and delete if it does var file, files = folder.getFilesByName(filename); while( files.hasNext()){ file = files.next(); file.setTrashed(true); } //New Code from Stackover Flow: //Upload file and set various properties var mediaData = form.myFile; var resource = { title: filename, mimetype: ''application/vnd.ms-excel'', description: "Uploaded via BNI Upload Form by " + form.myName + " on: " + timeStamp }; var file = Drive.Files.insert(resource, mediaData); // create file using Drive API var fileId = file.id; var DriveAppFile = DriveApp.getFileById(fileId); // retrieve file in DriveApp scope. var FileURL = DriveAppFile.getUrl(); //Retain URL of file for final end message to user DriveApp.removeFile(DriveAppFile); // remove new file from Users root My Drive folder.addFile(DriveAppFile); // puts file in selected folder //End of New code from Stackover Flow //Success message displayed to user return "Thanks! File uploaded successfully to: <br><br><b>Folder Location:</b> " + FolderURL + "<br>" + "<b>File:</b> " + FileURL + ". <br><br>For any queries please email [email protected] copying the URLs displayed here in your email. You can close this browser window now or use the link below to upload another file.<br><br>"; } catch (error) { //Catch error return it to user and email with error details

Está lanzando el mensaje de error "Respuesta vacía" en la línea de código anterior cuando intentamos subir un archivo grande (15 MB) ¿Tiene alguna sugerencia? Esto está dentro del límite de inserción de archivos de 5120GB y el código funciona bien en archivos más pequeños.

Ahora he intentado agregar un bucle en la función para intentar cargarlo un par de veces, y todavía estoy lanzando el mismo error con tristeza:

//setup function that will return null if file is not uploaded correctly function createDriveFile(resource_f, mediaData_f){ try{ var file = Drive.Files.insert(resource_f, mediaData_f); // create file using Drive API return file; } catch (e) {return null;} } //try upload and loop if null var maxTries = 3; var tries = 0; do { tries = tries + 1; if (tries > 0) { var file = createDriveFile(resource, mediaData); Logger.log("I''m trying to upload, try number: " + tries); } } while ((file == null) && (tries < maxTries)); if (file == null) { var file = Drive.Files.insert(resource, mediaData); // try one laste time to create file using Drive API - outside loop function so if error is thrown script stops }

El error solo parece ocurrir en un archivo más grande, incluso si reducimos el tamaño del mismo archivo que resuelve el error, así que tenemos que ajustar el proceso de carga para tener en cuenta un archivo más grande. ¿Hay un equivalente en Google Apps Script para hacer que la solicitud de subida de la API sea reanudable ?