Come riprodurre musica in streaming nella mia app dal collegamento di Google Drive e rendere accessibile il collegamento?

Aug 16 2020

Su un sito web gli utenti possono caricare musica. Questa musica viene caricata nel mio account Google Drive. Dopodiché, il seguente formato di collegamento viene scritto nel database:

https://drive.google.com/uc?id=ID_GOES_HERE

Ora quando accedi al link, cambia in qualcosa del genere:

https://doc-14-8s-docs.googleusercontent.com/docs/securesc/m4p0h6h3bpkoufgbajruvng9n4f51clu/fnjf7ftnl18svtcblses77hapi91jpe5/1597565925000/10139445714759083419/10139445714759083419/1mLu_myEgts9eaoWv6S9nxu8n4qfZM0Rr?authuser=0

Il collegamento lungo è il collegamento nel database che viene utilizzato dall'app per riprodurre la musica, ma non ho più il permesso di aprirlo lì. Come posso rendere accessibile l'ultimo e il lungo collegamento? C'è un modo per rendere pubblico questo lungo collegamento?

Grazie!

    <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>

Questo è lo script dell'app 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);
}

------- MODIFICARE -------

Ho provato la soluzione data:

purtroppo non funziona come previsto .. Ricevo il seguente link:

https://drive.google.com/uc?export=download&id=1Tnh8UgAzFKrp6e-8QCl21v16L3yVCqso 

ora quando prendo l'id da esso e lo inserisco qui:

http://docs.google.com/uc?export=open&id=your_file_id 

il risultato è un collegamento molto lungo che è il collegamento di cui ho bisogno. Questo non è ancora accessibile se sono in modalità browser privato, ad esempio, mi costringe ad accedere che non voglio. Dovrebbe essere accessibile con il collegamento come nella tua soluzione. Questo è il link:

https://doc-08-8s-docs.googleusercontent.com/docs/securesc/m4p0h6h3bpkoufgbajruvng9n4f51clu/cgag5dus6c18p9hc1hv0362urudm2g6t/1597730475000/10139445714759083419/10139445714759083419/1Tnh8UgAzFKrp6e-8QCl21v16L3yVCqso?e=open&authuser=0 

come rendere accessibile questo collegamento?

Sembra che questo collegamento disponga delle autorizzazioni che hai impostato http://docs.google.com/uc?export=open&id=your_file_id ma se copi il collegamento lungo, questo non fornisce le impostazioni di autorizzazione, si blocca comunque.

Risposte

2 Viney Aug 16 2020 at 12:29

Dopo aver creato il file è necessario assegnargli un livello di accesso appropriato che determini chi può accedervi e anche un livello di autorizzazione che determini cosa possono fare con quel file (lettura / scrittura / eliminazione)

Per il tuo caso d'uso dovrebbe essere pubblicamente accessibile con un link e di sola lettura. Quindi è così che puoi fare nello script dell'app

const file = DriveApp.getFolderById(folderId ||  "root").createFile(blob);
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); // <-- add this