Comment diffuser de la musique dans mon application à partir du lien Google Drive et rendre le lien accessible?

Aug 16 2020

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

2 Viney Aug 16 2020 at 12:29

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