Bagaimana cara mengalirkan musik di aplikasi saya dari tautan Google Drive dan membuat tautan dapat diakses?

Aug 16 2020

Di situs web, pengguna dapat mengunggah musik. Musik ini diunggah di akun Google Drive saya. Setelah itu format link berikut ditulis ke dalam database:

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

Sekarang ketika Anda mengakses tautan itu berubah menjadi seperti ini:

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

Tautan panjang adalah tautan dalam database yang digunakan untuk aplikasi memutar musik, tetapi saya tidak memiliki izin untuk membukanya di sana lagi. Bagaimana cara membuat tautan terakhir dan panjang dapat diakses? Adakah cara untuk membuat tautan panjang ini menjadi publik?

Terima kasih!

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

Ini adalah skrip aplikasi 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);
}

------- EDIT -------

Saya mencoba solusi yang diberikan:

sayangnya itu tidak berfungsi seperti yang diharapkan .. Saya mendapatkan tautan berikut:

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

sekarang ketika saya mengambil id darinya dan memasukkannya di sini:

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

Hasilnya adalah tautan yang sangat panjang yang merupakan tautan yang saya butuhkan. Yang ini masih tidak dapat diakses jika saya dalam mode browser pribadi misalnya, memaksa saya untuk masuk yang tidak saya inginkan. Ini harus dapat diakses dengan tautan seperti dalam solusi Anda. Ini tautannya:

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

bagaimana cara membuat tautan ini dapat diakses?

Sepertinya tautan ini memiliki izin yang telah Anda setel http://docs.google.com/uc?export=open&id=your_file_id tetapi jika Anda menyalin tautan panjang, yang ini tidak memberikan pengaturan izin, itu masih memblokir.

Jawaban

2 Viney Aug 16 2020 at 12:29

Setelah membuat file Anda, Anda perlu memberinya tingkat akses yang tepat yang menentukan siapa yang dapat mengaksesnya dan juga tingkat izin yang menentukan apa yang dapat mereka lakukan dengan file itu (baca / tulis / hapus)

Untuk kasus penggunaan Anda, ini harus dapat diakses publik dengan tautan dan hanya-baca. Jadi, inilah cara Anda melakukannya di skrip aplikasi

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