¿Cómo transmitir música en mi aplicación desde el enlace de Google Drive y hacer que el enlace sea accesible?
En un sitio web, los usuarios pueden cargar música. Esta música se carga en mi cuenta de Google Drive. Después de eso, el siguiente formato de enlace se escribe en la base de datos:
https://drive.google.com/uc?id=ID_GOES_HERE
Ahora, cuando accede al enlace, cambia en algo como esto:
https://doc-14-8s-docs.googleusercontent.com/docs/securesc/m4p0h6h3bpkoufgbajruvng9n4f51clu/fnjf7ftnl18svtcblses77hapi91jpe5/1597565925000/10139445714759083419/10139445714759083419/1mLu_myEgts9eaoWv6S9nxu8n4qfZM0Rr?authuser=0
El enlace largo es el enlace en la base de datos que se usa para que la aplicación reproduzca la música, pero ya no tengo permiso para abrirlo allí. ¿Cómo puedo hacer accesible el último y más largo enlace? ¿Hay alguna forma de hacer público este enlace largo?
¡Gracias!
<form id="form">
<input name="file" id="uploadfile" type="file">
<input name="filename" id="filename" type="text">
<input id="submit" type="submit">
</form>
<script>
const form = document.getElementById('form');
form.addEventListener('submit', e => {
e.preventDefault();
const file = form.file.files[0];
const fr = new FileReader();
fr.readAsArrayBuffer(file);
fr.onload = f => {
const url = "https://script.google.com/macros/s/###/exec"; // <--- Please set the URL of Web Apps.
const qs = new URLSearchParams({filename: form.filename.value || file.name, mimeType: file.type});
fetch(`${url}?${qs}`, {method: "POST", body: JSON.stringify([...new Int8Array(f.target.result)])})
.then(res => res.json())
.then(e => console.log("https://drive.google.com/uc? export=download&id=" + e.fileId))
.catch(err => console.log(err));
}
});
</script>
Este es el script de la aplicación de Google
function doPost(e) {
const folderId = "root"; // Folder ID which is used for putting the file, if you need.
const blob = Utilities.newBlob(JSON.parse(e.postData.contents), e.parameter.mimeType, e.parameter.filename);
const file = DriveApp.getFolderById(folderId || "root").createFile(blob);
const responseObj = {filename: file.getName(), fileId: file.getId(), fileUrl: file.getUrl()};
return ContentService.createTextOutput(JSON.stringify(responseObj )).setMimeType(ContentService.MimeType.JSON);
}
------- EDITAR -------
Probé la solución dada:
Lamentablemente, no funciona como se esperaba. Recibo el siguiente enlace:
https://drive.google.com/uc?export=download&id=1Tnh8UgAzFKrp6e-8QCl21v16L3yVCqso
ahora, cuando tomo la identificación y la inserto aquí:
http://docs.google.com/uc?export=open&id=your_file_id
el resultado es un enlace realmente largo que es el enlace que necesito. Este todavía no es accesible si estoy en modo de navegador privado, por ejemplo, me obliga a iniciar sesión y no quiero. Debería ser accesible con un enlace como en su solución. Este es el enlace:
https://doc-08-8s-docs.googleusercontent.com/docs/securesc/m4p0h6h3bpkoufgbajruvng9n4f51clu/cgag5dus6c18p9hc1hv0362urudm2g6t/1597730475000/10139445714759083419/10139445714759083419/1Tnh8UgAzFKrp6e-8QCl21v16L3yVCqso?e=open&authuser=0
¿Cómo hacer que este enlace sea accesible?
Parece que este enlace tiene los permisos que ha establecido http://docs.google.com/uc?export=open&id=your_file_id pero si copia el enlace largo, este no proporciona la configuración de permisos, aún se bloquea.
Respuestas
Después de crear su archivo, debe otorgarle un nivel de acceso adecuado que determine quién puede acceder a él y también un nivel de permiso que determina lo que pueden hacer con ese archivo (leer / escribir / eliminar)
Para su caso de uso, debe ser de acceso público con un enlace y de solo lectura. Así que así es como puedes hacerlo en el script de la aplicación.
const file = DriveApp.getFolderById(folderId || "root").createFile(blob);
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); // <-- add this