Comment diffuser de la musique dans mon application à partir du lien Google Drive et rendre le lien accessible?
Sur un site Web, les utilisateurs peuvent télécharger de la musique. Cette musique est en cours de téléchargement dans mon compte Google Drive. Après cela, le format de lien suivant est écrit dans la base de données:
https://drive.google.com/uc?id=ID_GOES_HERE
Maintenant, lorsque vous accédez au lien, il change en quelque chose comme ceci:
https://doc-14-8s-docs.googleusercontent.com/docs/securesc/m4p0h6h3bpkoufgbajruvng9n4f51clu/fnjf7ftnl18svtcblses77hapi91jpe5/1597565925000/10139445714759083419/10139445714759083419/1mLu_myEgts9eaoWv6S9nxu8n4qfZM0Rr?authuser=0
Le lien long est le lien dans la base de données qui est utilisé pour que l'application joue la musique, mais je n'ai plus l'autorisation de l'ouvrir là-bas. Comment puis-je rendre le dernier et long lien accessible? Existe-t-il un moyen de rendre ce long lien public?
Je vous remercie!
<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>
Ceci est le script de l'application 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);
}
------- ÉDITER -------
J'ai essayé la solution donnée:
Malheureusement, cela ne fonctionne pas comme prévu. Je reçois le lien suivant:
https://drive.google.com/uc?export=download&id=1Tnh8UgAzFKrp6e-8QCl21v16L3yVCqso
maintenant quand je prends l'identifiant et l'insère ici:
http://docs.google.com/uc?export=open&id=your_file_id
le résultat est un lien très long qui est le lien dont j'ai besoin. Celui-ci n'est toujours pas accessible si je suis en mode navigateur privé par exemple, il me force à me connecter ce que je ne veux pas. Il doit être accessible avec un lien comme dans votre solution. Voici le lien:
https://doc-08-8s-docs.googleusercontent.com/docs/securesc/m4p0h6h3bpkoufgbajruvng9n4f51clu/cgag5dus6c18p9hc1hv0362urudm2g6t/1597730475000/10139445714759083419/10139445714759083419/1Tnh8UgAzFKrp6e-8QCl21v16L3yVCqso?e=open&authuser=0
comment rendre ce lien accessible?
Il semble que ce lien dispose des autorisations que vous avez définies http://docs.google.com/uc?export=open&id=your_file_id mais si vous copiez le lien long, celui-ci ne fournit pas les paramètres d'autorisation, il bloque toujours.
Réponses
Après avoir créé votre fichier, vous devez lui donner un niveau d'accès approprié qui détermine qui peut y accéder et également un niveau d'autorisation qui détermine ce qu'ils peuvent faire avec ce fichier (lecture / écriture / suppression)
Pour votre cas d'utilisation, il doit être accessible au public avec un lien et en lecture seule. Voici donc comment faire dans le script de l'application
const file = DriveApp.getFolderById(folderId || "root").createFile(blob);
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); // <-- add this