El siguiente código contiene la API createFile() , espera un solo objeto (llamado "archivo" aquí). De esta manera, el archivo se puede guardar en alguna carpeta de Google Drive.
function uploadFiles(data) { var file = data; var folder = DriveApp.getFolderById('1UWGb5Mzr9VzPUuQTr9CWD7EMYNEAzyuC'); var createFile = folder.createFile(file); return createFile.getUrl(); }Ahora quiero combinar esta función con otra página web. Sin embargo, el script en otra página web está a continuación:
for (clipIndex = 0; clipIndex < unrollWordCounts(getAllWantedWords()).length; clipIndex++) { try { var clip = allClips[clipIndex]; clip.style.display = 'None'; var audioBlobUrl = clip.querySelector('audio').src; var word = clip.querySelector('p').innerText; var filename = word + '_' + Date.now() + '.ogg'; saveAs(audioBlobUrl, filename); google.script.run.withSuccessHandler(onSuccess).uploadFiles(audioBlobUrl); }Los datos que quiero cargar en Google Drive son audioBlobUrl . Sin embargo, createFile() del script de la aplicación espera un archivo. Parece que audioBlobUrl no es un archivo. ¿Cómo debo modificar el código para que pueda pasar los datos esperados a google createFile() para lograr mi objetivo?
A partir de su respuesta, confirmé que su audioBlobUrl es como blob:https://n-gtuqz5opiogjdwjt5bm3j7sgiq5rl4g7osg6piq-0lu-script.googleusercontent.com/a9f62d15-c7c1-41c0-ac5d-0a05dcb01fa6 . En este caso, lamentablemente, esta URL no se puede utilizar directamente. Entonces, para usar esto en Google Apps Script, se requiere convertir a los datos. En esta respuesta, me gustaría proponer el script de muestra para convertir la URL a los datos (en este caso, la URL se convierte a la matriz de bytes). Con esto, los datos se pueden descodificar en Google Apps Script y se pueden guardar como un archivo.
Como secuencia de comandos de muestra simple, cuando se utilizan su audioBlobUrl y el nombre de filename , utilice la siguiente secuencia de comandos.
fetch(audioBlobUrl).then(r => r.blob()).then(blob => { var fr = new FileReader; fr.onload = f => { var obj = {data: [...new Int8Array(f.target.result)], mimeType: blob.type, filename}; google.script.run.withSuccessHandler(onSuccess).uploadFiles(obj); }; fr.readAsArrayBuffer(blob); }); En el lado de Google Apps Script, modifique uploadFiles de la siguiente manera.
function uploadFiles({data, mimeType, filename}) { var file = Utilities.newBlob(data, mimeType, filename || "sampleFilename"); var folder = DriveApp.getFolderById('1UWGb5Mzr9VzPUuQTr9CWD7EMYNEAzyuC'); var createFile = folder.createFile(file); return createFile.getUrl(); } google.script.run se ejecuta con el proceso asíncrono. Parece que google.script.run se usa en un bucle. Aunque no estoy seguro acerca de su secuencia de comandos completa, si el proceso asincrónico se convertirá en su nuevo problema, modifíquelo.
Este script modificado supone que su audioBlobUrl es como blob:https://n-gtuqz5opiogjdwjt5bm3j7sgiq5rl4g7osg6piq-0lu-script.googleusercontent.com/a9f62d15-c7c1-41c0-ac5d-0a05dcb01fa6 de su respuesta. Por favor tenga cuidado con esto.
No estoy seguro acerca de su situación real a partir de su pregunta. Cuando utilice su secuencia de comandos como aplicaciones web, cuando modifique la secuencia de comandos, refleje la secuencia de comandos más reciente en las aplicaciones web. Tenga cuidado con esto.