Wie kann ich Musik in meiner App über den Google Drive-Link streamen und den Link zugänglich machen?

Aug 16 2020

Auf einer Website können Benutzer Musik hochladen. Diese Musik wird in mein Google Drive-Konto hochgeladen. Danach wird folgendes Linkformat in die Datenbank geschrieben:

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

Wenn Sie jetzt auf den Link zugreifen, ändert sich Folgendes:

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

Der lange Link ist der Link in der Datenbank, über den die App die Musik abspielt, aber ich habe keine Berechtigung mehr, sie dort zu öffnen. Wie kann ich den letzten und langen Link zugänglich machen? Gibt es eine Möglichkeit, diesen langen Link öffentlich zu machen?

Vielen Dank!

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

Dies ist das Google App-Skript

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);
}

------- BEARBEITEN -------

Ich habe die gegebene Lösung ausprobiert:

Leider funktioniert es nicht wie erwartet. Ich bekomme den folgenden Link:

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

jetzt, wenn ich die ID daraus nehme und sie hier einfüge:

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

Das Ergebnis ist ein wirklich langer Link, der der Link ist, den ich brauche. Dieser ist immer noch nicht zugänglich, wenn ich zum Beispiel im privaten Browsermodus bin. Er zwingt mich, mich anzumelden, was ich nicht möchte. Es sollte mit einem Link wie in Ihrer Lösung zugänglich sein. Das ist die Verbindung:

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

Wie mache ich diesen Link zugänglich?

Dieser Link verfügt anscheinend über die von Ihnen festgelegten Berechtigungen http://docs.google.com/uc?export=open&id=your_file_id Wenn Sie jedoch den langen Link kopieren, bietet dieser nicht die Berechtigungseinstellungen, sondern blockiert ihn weiterhin.

Antworten

2 Viney Aug 16 2020 at 12:29

Nach dem Erstellen Ihrer Datei müssen Sie ihr eine ordnungsgemäße Zugriffsebene zuweisen, die bestimmt, wer darauf zugreifen kann, sowie eine Berechtigungsstufe, die bestimmt, was sie mit dieser Datei tun können (Lesen / Schreiben / Löschen).

Für Ihren Anwendungsfall sollte es mit einem Link öffentlich zugänglich und schreibgeschützt sein. So können Sie das im App-Skript tun

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